我已经声明了 std::vector<int>
在我的主函数中,并想从中删除所有偶数元素,但只能将它的迭代器传递给一个名为 remove_even
的函数它接受容器的开始和结束迭代器。
#include <iostream>
#include <algorithm>
#include <vector>
void remove_even(auto start, auto end) {
while(start != end) {
if(*start % 2 == 0)
// Remove element from container
}
}
int main() {
std::vector<int> vec = {2, 4, 5, 6, 7};
remove_even(vec.begin(), vec.end());
}
有没有办法在 C++ 中执行此操作,还是我必须直接将 vector 传递给函数?
最佳答案
类 std::vector
本身具有方法 erase
允许删除 vector 中所需的元素。
使用迭代器您所能做的就是调用标准算法 std::remove_if
,然后在调用方法 erase
时使用返回的迭代器。
例如
#include <iostream>
#include <vector>
#include <algorithm>
std::vector<int>::iterator remove_even( std::vector<int>::iterator first,
std::vector<int>::iterator last )
{
return std::remove_if( first, last, []( int x ) { return x % 2 == 0; } );
}
int main()
{
std::vector<int> vec = { 2, 4, 5, 6, 7 };
for ( int x : vec ) std::cout << x << ' ';
std::cout << std::endl;
vec.erase( remove_even( vec.begin(), vec.end() ), vec.end() );
for ( int x : vec ) std::cout << x << ' ';
std::cout << std::endl;
}
程序输出为
2 4 5 6 7
5 7
关于c++ - 通过在 C++ 中单独直接访问其迭代器来删除容器的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35746497/