【问题标题】:vector and iterators向量和迭代器
【发布时间】:2011-06-21 11:28:20
【问题描述】:

我有一个定义如下的向量

vector<Field> m_vField;

我用这个命令填充向量:

 AddFiled(const Field& aiField)
 {
   m_vField.push_back(aiField);
 }

但是当我尝试运行迭代器时,向量在第一次迭代后因“访问冲突读取位置”而崩溃

vector<Field>::iterator it;
for(it = m_vField.begin(); it != m_vField.end() ; it++)
{
   dosomthing
}

感谢您的帮助。

【问题讨论】:

  • 您发布的代码是可以的。错误可能在“dosomthing”中。请发布更多代码。
  • 您在发布的代码中有两个向量名称(m_vField 和 vField) - 剪切/粘贴错误?另请说明您如何使用迭代器。
  • dosomthing 是否修改 it,或者在向量中添加或删除元素?您发布的代码不会导致访问冲突。
  • 向量是在类中声明的还是什么?只是一个疑问,因为您已经编写了一个单独的函数来推入向量,当您也可以直接执行它时。
  • 还有一件事:使用++it 对抗it++。 it++ 源代码通常看起来像这样:iterator operator++(int i){ iterator temp = (*this); ++(*this); return temp; };

标签: c++ iterator std


【解决方案1】:

认为您错误地命名了变量。不是向量m_vField,而您在循环中使用了vField。

【讨论】:

  • 这仍然不能解释为什么在代码中迭代向量会导致访问冲突。此外,在这种情况下,OP 在提出问题时几乎总是一个错字(尽管并非总是如此)。您应该将此作为评论而不是答案发布。
  • 嗯..真的。认为向量是在类中声明的。只是一个疑问,因为他编写了一个单独的函数来将元素推入向量中,当它也可以直接完成时。
猜你喜欢
  • 1970-01-01
  • 2010-10-09
  • 1970-01-01
  • 2011-11-15
  • 2017-08-29
  • 1970-01-01
  • 2018-07-09
  • 2013-12-16
相关资源
最近更新 更多