加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 迭代器返回垃圾

发布时间:2020-12-16 09:43:36 所属栏目:百科 来源:网络整理
导读:参见英文答案 Does resizing a vector invalidate iterators?????????????????????????????????????5个 无法弄清楚我哪里出错了.据我所知,这段代码应返回“1,2,3”,但我得到以下内容.我需要全局声明的向量及其迭代器,因为我将向量传递给实际代码中的函数,并
参见英文答案 > Does resizing a vector invalidate iterators?????????????????????????????????????5个
无法弄清楚我哪里出错了.据我所知,这段代码应返回“1,2,3”,但我得到以下内容.我需要全局声明的向量及其迭代器,因为我将向量传递给实际代码中的函数,并且需要在某些函数中更新迭代器.任何帮助表示赞赏!

#include <iostream>
#include <vector>

using namespace std;

vector<float> grid;
vector<float>::iterator gridPtr;

int main()

{
  grid.push_back(1);
  grid.push_back(2);

  gridPtr = grid.begin();

  grid.push_back(3);

  cout << "gridPtr: " << *gridPtr << endl;

  gridPtr++;

  cout << "gridPtr: " << *gridPtr << endl;

  gridPtr++;

  cout << "gridPtr: " << *gridPtr << endl;
}

返回:

gridPtr: 2.62257e-33
gridPtr: 2
gridPtr: 0

解决方法

push_back()可能使所有迭代器无效.也就是说,如果必须重新分配后备存储,则所有现有迭代器都将失效.

如果您提前知道要推送多少元素,则可以使用reserve()预分配必要的内存,这将阻止push_back()重新分配(从而使迭代器无效).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读