当前位置: 首页 > 编程笔记 >

C ++程序中的迭代器无效

储承
2023-03-14
本文向大家介绍C ++程序中的迭代器无效,包括了C ++程序中的迭代器无效的使用技巧和注意事项,需要的朋友参考一下

在本教程中,我们将讨论一个程序,以了解C ++中的迭代器失效。

在容器对象的元素上进行迭代时,有时如果我们不应用绑定检查,它可能会失效。这主要是由于容器对象的形状和大小的变化而发生的。

示例

#include <bits/stdc++++.h>
using namespace std;
int main() {
   //声明向量
   vector <int> v{1, 5, 10, 15, 20};
   //在执行过程中更改向量
   //这将导致绑定无效
   for (auto it=v.begin();it!=v.end();it++)
      if ((*it) == 5)
         v.push_back(-1);
   for (auto it=v.begin();it!=v.end();it++)
      cout << (*it) << " ";
   return 0;
}

输出结果

1 5 10 15 20 -1 -1

(可能还会发生,添加新元素时,矢量将被复制到新位置,而我们的迭代器仍指向旧位置,这将导致错误。)

 类似资料:
  • 最受欢迎的C迭代器失效规则帖子声称,不清楚过去的结束迭代器(即,、、、和)是否根据与普通迭代器相同的规则失效,这些迭代器指向容器中的元素。这些针对2003年和2011年C版的声明都遵从了一篇讨论结束迭代器失效规则的帖子,其中公认的答案表明2003年的标准在这个问题上是模糊的。这一结论基于23.1/10(在的上下文中)中的一条评论,该评论似乎暗示,当规范没有明确提到结束迭代器失效时,它们可能会失效。

  • 本文向大家介绍C ++编程中的输出迭代器,包括了C ++编程中的输出迭代器的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将讨论一个程序,以了解C ++中的输出迭代器。 输出迭代器是主要的五个迭代器的一部分。它们与输入迭代器的功能相反,它们可以被分配值,但不能被访问以获取值。 示例 输出结果

  • 本文向大家介绍C ++中的RLE迭代器,包括了C ++中的RLE迭代器的使用技巧和注意事项,需要的朋友参考一下 假设我们必须创建一个迭代器,该迭代器遍历游程编码序列。此处,迭代器通过调用RLEIterator(int [] A)进行初始化,其中A是序列的游程长度编码。因此我们可以说,对于所有偶数i,A [i]告诉我们在序列中重复非负整数值A [i + 1]的次数。这里的迭代器支持一个功能- nex

  • 本文向大家介绍C ++中的组合迭代器,包括了C ++中的组合迭代器的使用技巧和注意事项,需要的朋友参考一下 假设我们必须设计一个Iterator类,其中包含少量操作- 定义一个构造函数,该构造函数将以不同的小写英文字母排序的字符串字符和一个数字CombineLength作为参数。 定义一个函数,该函数将按字母顺序返回长度combinationLength的下一个组合。 定义另一个函数,当且仅当存在

  • 本文向大家介绍C ++中的输入迭代器,包括了C ++中的输入迭代器的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将讨论一个程序,以了解C ++中的输入迭代器。 输入迭代器是STL中五个最弱,最简单的迭代器之一。它们主要用于串行输入操作,在该操作中,每个值都被读取为一个值,然后迭代器移至下一个值。 示例 输出结果

  • 迭代器可被用来访问一个容器类的所包函的全部元素,其行为像一个指针。举一个例子,你可用一个迭代器来实现对vector容器中所含元素的遍历。有这么几种迭代器如下: 迭代器 描述 input_iterator 提供读功能的向前移动迭代器,它们可被进行增加(++),比较与解引用(*)。 output_iterator 提供写功能的向前移动迭代器,它们可被进行增加(++),比较与解引用(*)。 forwar