21xrx.com
2024-11-05 16:37:02 Tuesday
登录
文章检索 我的文章 写文章
C++中如何使用foreach删除元素
2023-06-30 02:17:06 深夜i     --     --
C++ foreach 删除元素

在C++中,需要删除向量(vector)中的元素时,使用foreach循环可以更加方便快捷。但是,需要注意的是,在foreach循环中删除元素会导致遍历出错,建议使用另外的方法进行删除。

方法一:使用erase()函数

C++的STL库提供了vector的erase()函数可以删除任意位置的元素。如果要在foreach循环中删除元素,可以先记录当前要删除的元素的位置,遍历到结束后统一进行删除。具体代码如下:


vector<int> vec 4;

vector<int>::iterator it;

int deletePos = -1;

for (it = vec.begin(); it != vec.end(); it++) {

  if (*it == 3) {

    deletePos = it - vec.begin();

  }

}

if (deletePos >= 0) {

  vec.erase(vec.begin() + deletePos);

}

上述代码中,首先定义了一个vector类型的容器vec,并初始化为 1。然后使用迭代器it进行遍历,如果遍历到了要删除的元素,则记录元素的位置deletePos。遍历完成后,如果deletePos不为负数,则使用erase()函数删除该元素。

方法二:使用remove()和erase()函数

另外一种方法是使用remove()和erase()函数联合使用。remove()函数可以将容器中符合条件的元素放到容器的末尾,然后返回指向新的末尾之后的位置的迭代器。erase()函数在该位置之前的元素都是符合条件的,可以进行删除。代码如下:


vector<int> vec 3;

vec.erase(remove(vec.begin(), vec.end(), 3), vec.end());

上述代码中,先定义了一个vector类型的容器vec,初始化为 3。使用remove()函数将容器中所有值为3的元素移到容器的末尾,并用erase()函数删除该元素,最终得到的容器为 2。

总结

C++中使用foreach循环删除元素需要注意,一般建议使用erase()函数或者remove()和erase()函数进行删除。这两种方式都需要记录要删除的元素位置,或者通过remove()函数将符合条件的元素移到容器的末尾,最后再进行删除。同时,当删除操作会影响到迭代器时,需要特别小心,以免程序出现错误。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复