我已经声明了一个std :: vector< int>在我的main函数中,并希望从中删除所有偶数元素,但只能将它的迭代器传递给一个名为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中这样做或者我必须直接将我的向量传递给函数?
解决方法
它是类std :: 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,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