21xrx.com
2024-11-05 14:57:47 Tuesday
登录
文章检索 我的文章 写文章
如何使用C++迭代器遍历并删除元素
2023-06-30 17:43:37 深夜i     --     --
C++ 迭代器 遍历 删除元素

在C++中,迭代器是一种可用于遍历容器中元素的工具。使用迭代器可以极大地简化代码,但在删除元素时可能会出现问题。本文将介绍如何使用C++迭代器遍历并删除元素的方法。

首先,我们需要了解两种类型的迭代器:正向迭代器和反向迭代器。正向迭代器用于从前向后遍历容器中的元素,而反向迭代器则用于从后向前遍历元素。

接下来,我们需要注意遍历和删除元素的顺序。使用迭代器删除元素时,必须先遍历元素,然后再进行删除操作。否则,会导致迭代器失效,从而导致程序崩溃。

那么如何正确地使用迭代器来遍历并删除元素呢?下面是一些示例代码:

正向迭代器:


#include <iostream>

#include <vector>

using namespace std;

int main() {

  vector<int> v 1;

  auto it = v.begin();

  while (it != v.end()) {

    if (*it % 2 == 0) {

      it = v.erase(it);

    }

    else {

      ++it;

    }

  }

  for (auto i : v)

    cout << i << " ";

  

  return 0;

}

上述代码中,我们使用了一个while循环以及一个if语句。如果当前元素是偶数,则使用v.erase()函数将其从容器中删除,并移动迭代器到下一个元素。如果当前元素是奇数,则只移动迭代器到下一个元素。最终,我们使用for循环打印剩余的元素值。

反向迭代器:


#include <iostream>

#include <list>

using namespace std;

int main() {

  list<int> l 3;

  auto it = l.rbegin();

  while (it != l.rend()) {

    if (*it % 2 == 0) {

      auto tmp = it;

      ++tmp;

      l.erase(--(it.base()));

      it = tmp;

    }

    else {

      ++it;

    }

  }

  for (auto i : l)

    cout << i << " ";

  

  return 0;

}

上述代码中,我们使用了一个while循环以及一个if语句。如果当前元素是偶数,则使用l.erase()函数将其从容器中删除。注意,这里需要使用--(it.base())将反向迭代器先转换为正向迭代器,才能使用 erase() 函数。最后,我们使用for循环打印剩余的元素值。

总结一下,使用迭代器遍历并删除元素时需要注意以下几点:

1. 迭代器不能直接在删除元素后被使用,否则会导致迭代器失效。

2. 在删除元素时,必须先遍历元素,然后再进行删除操作。

3. 使用反向迭代器时,需要先将其转换为正向迭代器才能使用 erase() 函数。

希望本文能帮助读者更加了解如何使用C++迭代器遍历并删除元素。

  
  

评论区

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