通过在C中直接访问其迭代器来删除容器的元素

前端之家收集整理的这篇文章主要介绍了通过在C中直接访问其迭代器来删除容器的元素前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经声明了一个std :: vector< int>在我的main函数中,并希望从中删除所有偶数元素,但只能将它的迭代器传递给一个名为remove_even的函数,该函数接受容器的开始和结束迭代器.
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4.  
  5. void remove_even(auto start,auto end) {
  6. while(start != end) {
  7. if(*start % 2 == 0)
  8. // Remove element from container
  9. }
  10. }
  11.  
  12. int main() {
  13. std::vector<int> vec = {2,4,5,6,7};
  14. remove_even(vec.begin(),vec.end());
  15. }

有没有办法在C中这样做或者我必须直接将我的向量传递给函数

解决方法

它是类std :: vector本身,它具有允许擦除向量中所需元素的擦除方法.

使用迭代器所能做的就是调用标准算法std :: remove_if,然后在方法erase的调用中使用返回的迭代器.

例如

  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4.  
  5. std::vector<int>::iterator remove_even( std::vector<int>::iterator first,std::vector<int>::iterator last )
  6. {
  7. return std::remove_if( first,last,[]( int x ) { return x % 2 == 0; } );
  8. }
  9.  
  10. int main()
  11. {
  12. std::vector<int> vec = { 2,7 };
  13.  
  14. for ( int x : vec ) std::cout << x << ' ';
  15. std::cout << std::endl;
  16.  
  17. vec.erase( remove_even( vec.begin(),vec.end() ),vec.end() );
  18.  
  19. for ( int x : vec ) std::cout << x << ' ';
  20. std::cout << std::endl;
  21. }

程序输出

  1. 2 4 5 6 7
  2. 5 7

猜你在找的C&C++相关文章