首页 >后端开发 >C++ >如何在迭代时安全地删除 C 向量中的元素?

如何在迭代时安全地删除 C 向量中的元素?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-05 04:31:09420浏览

How to Safely Erase Elements from a C   Vector While Iterating?

使用擦除迭代器进行向量消除

在编程中,有效地遍历和操作数据结构至关重要。矢量是 C 语言中流行的动态容器,提供灵活性和增长能力。然而,在迭代时擦除元素可能会导致意想不到的结果。

考虑这个例子:

int main()
{
    vector<int> res;
    res.push_back(1);
    vector<int>::iterator it = res.begin();
    for( ; it != res.end(); it++)
    {
        it = res.erase(it);
        //if(it == res.end())
        //  return 0;
    }
}

上面的代码旨在在迭代向量“res”时擦除向量“res”中的所有元素。但是,在擦除最后一个元素时遇到错误。这是因为“res.erase(it)”返回的迭代器指向下一个有效元素,在本例中为“res.end()”。

要解决此问题,可以使用不带条件语句的 while 循环,例如:

while (it != res.end()) {
    it = res.erase(it);
}

这可确保循环继续,直到所有元素都已完成

或者,如果您只需要根据某些条件擦除特定元素,则可以使用以下方法:

for ( ; it != res.end(); ) {
  if (condition) {
    it = res.erase(it);
  } else {
    ++it;
  }
}

请记住,在使用迭代器进行向量操作时,这一点至关重要了解“res.erase(it)”的运作方式并相应地调整循环以防止意外行为。

以上是如何在迭代时安全地删除 C 向量中的元素?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn