【问题标题】:Iterator always poiting the last element [closed]迭代器总是指向最后一个元素
【发布时间】:2014-06-29 01:03:11
【问题描述】:

我正在使用 C++ 编写程序,当我尝试列出我的向量元素时,它总是显示最后一个元素。

这是我的代码:

typedef string Tab[1][1]; 
struct Node
{
  Tab t1;
};

这是我列出元素的方式:

std::vector<Node*>::iterator itr;

for(itr = Tab_dynamique.begin(); itr != Tab_dynamique.end(); *itr++)
{
  cout << (*itr)->t1[0][0] << " | " << (*itr)->t1[0][1]<< endl;
}

谁能告诉我为什么它总是显示向量的最后一个元素?

【问题讨论】:

  • 试试itr++(不取消引用)
  • 据我所知,这应该始终显示第一个元素。并且总是意味着您执行 *itr++ 会导致无限循环。
  • 虽然没有必要,但为什么*itr++ 中的* 会阻止它工作? ideone.com/9IZCoQ
  • 为什么我的问题被评为-2 ??? O.o

标签: c++ pointers vector iterator


【解决方案1】:

至少根据您向我们展示的内容,您的代码应该可以工作,但是:

  1. 您的数组typedef string Tab[1][1] 只有一个元素:Tab[0][0]Tab[0][1] 超出范围。例如int tab[3] 具有以下 3 个元素:tab[0], tab[1], tab[2]
  2. 您不应像以前那样增加迭代器 (*itr++)。首先,您的取消引用是不必要的,并且对您的迭代器增量没有任何影响。其次,您应该以这种方式递增迭代器:++itr,因为itr++ 创建了itr 的冗余副本以供返回,然后只递增迭代器。

【讨论】:

  • 嗨,我按照你说的做了,它总是显示相同的结果,即列表的最后一个元素。
  • 也许一开始你在 Tab_dynamique 中放了一些 NULL 元素?在您的帖子中添加您如何声明 Tab_dynamique 以及如何在向量中填充元素。届时我们将继续寻找解决方案。
  • 我发现了问题,它是 Tab t1 每次都取最后一个值,并且从不改变它。但我找不到解决方案:/
  • for 循环前 Tab_dynamique 的大小是多少?代码:vector&lt;Node*&gt;::sizeof()?
  • 它给出了相同大小的向量,但是当我尝试获取该值时,它总是给出最后一个分配节点的值,
猜你喜欢
  • 2011-08-21
  • 2011-03-31
  • 2013-02-20
  • 2016-02-12
  • 2011-02-10
  • 2019-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多