Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 按以下方式更正std::vector迭代器无效是否有效?_C++_C++11 - Fatal编程技术网

C++ 按以下方式更正std::vector迭代器无效是否有效?

C++ 按以下方式更正std::vector迭代器无效是否有效?,c++,c++11,C++,C++11,使用C++11或更高版本,假设我们在向量中存储指向元素的迭代器: std::vector<int> v{1, 2, 3, 4, 5}; auto it = v.begin() + 2; // it points to 3 锁紧螺栓:编号 从CPP参考 在擦除点或之后使迭代器和引用(包括结束迭代器)无效 v、 开始;已使所有迭代器无效。使用它有未定义的行为 没有办法纠正迭代器无效。一旦迭代器对象无效,您唯一能做的就是为它指定一个有效的迭代器值。否 从CPP参考 在擦除点或之后使迭代

使用C++11或更高版本,假设我们在向量中存储指向元素的迭代器:

std::vector<int> v{1, 2, 3, 4, 5};
auto it = v.begin() + 2;  // it points to 3
锁紧螺栓:

编号

从CPP参考

在擦除点或之后使迭代器和引用(包括结束迭代器)无效

v、 开始;已使所有迭代器无效。使用它有未定义的行为

没有办法纠正迭代器无效。一旦迭代器对象无效,您唯一能做的就是为它指定一个有效的迭代器值。

从CPP参考

在擦除点或之后使迭代器和引用(包括结束迭代器)无效

v、 开始;已使所有迭代器无效。使用它有未定义的行为


没有办法纠正迭代器无效。一旦迭代器对象无效,您唯一能做的就是为它指定一个有效的迭代器值。

我还没有看到一个迭代器不可用,并且实际上没有指向正确的元素。因为迭代器是一个美化了的指针,所以假设没有内存重新分配,对我来说是有意义的。@TonvandenHeuvel。未定义的行为在当前执行您期望的操作时最为危险。@TonvandenHeuvel以下是导致错误的确切代码示例:您的原始示例:@TonvandenHeuvel-这是未定义的行为,因为标准上说它是。未定义的行为只意味着标准没有告诉您程序的功能。这并不意味着坏事一定会发生。有时,代码将完全按照您的预期执行,直到您向最重要的客户机演示,这时它将异常失败。@TonvandenHeuvel无所谓。标准上说它们是无效的。这就是为什么调试迭代器可以通过擦除来修改,以抛出所有东西。我还没有看到一个迭代器不可用,并且在实践中没有指向正确的元素。因为迭代器是一个美化了的指针,所以假设没有内存重新分配,对我来说是有意义的。@TonvandenHeuvel。未定义的行为在当前执行您期望的操作时最为危险。@TonvandenHeuvel以下是导致错误的确切代码示例:您的原始示例:@TonvandenHeuvel-这是未定义的行为,因为标准上说它是。未定义的行为只意味着标准没有告诉您程序的功能。这并不意味着坏事一定会发生。有时,代码将完全按照您的预期执行,直到您向最重要的客户机演示,这时它将异常失败。@TonvandenHeuvel无所谓。标准上说它们是无效的。这就是为什么调试迭代器可以通过擦除来修改,从而抛出所有内容
--it;
v.erase(v.begin());
// it still points to 3 in all cases?