迭代器始终指向最后一个元素 我用C++做了一个程序,当我试图列出我的向量元素时,它总是显示最后一个元素。

迭代器始终指向最后一个元素 我用C++做了一个程序,当我试图列出我的向量元素时,它总是显示最后一个元素。,c++,pointers,vector,iterator,C++,Pointers,Vector,Iterator,这是我的密码: 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] << " | " << (

这是我的密码:

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;
}
std::vector::iterator itr;
对于(itr=Tab_dynamique.begin();itr!=Tab_dynamique.end();*itr++)
{

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

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

  • 尝试
    itr++
    (不取消引用)你能给我一个答案吗?据我所知,这应该总是显示第一个元素。并且总是意味着你通过做*itr++来产生一个无限循环。虽然没有必要,为什么
    *itr++
    中的
    *
    阻止它工作?为什么我的问题被评为-2???O.oHi我照你说的做了,它总是显示相同的结果,l列表中的ast元素。可能一开始你在Tab_Dynamicque中添加了一些空元素?在你的帖子中添加你如何声明Tab_Dynamicque以及如何在向量中填充元素。然后我们将继续寻找解决方案。我发现了问题,是Tab t1每次都使用最后一个值,并且从不更改它。但我找不到这:/for循环之前的Tab_dynamique的大小是多少?代码:vector::sizeof()?它给出了向量的相同大小,但当我尝试获取值时,它总是给出最后分配的节点的值,