带链表的C ++迭代器

时间:2014-05-03 05:45:52

标签: c++ linked-list iterator

我有一个对象的链接列表,其中每个对象都有char的链接列表。

我宣布了三个迭代器:

top = someList.begin();

middle = top++;

bottom = middle++;

当我打印每个迭代器的列表时,它与完整列表的内容不匹配。

基本上,在那些声明语句的末尾,top变为中间行,mid是它的意思,bottom是最高行的意思。

我假设这是我用增量声明迭代器的方式。非常感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

让我们看看每个声明后会发生什么。假设位置标记0,1,2,3 ...为列表
问题出在后++

top = someList.begin();
//top=0

middle = top++;
//middle=0
//top=1

bottom = middle++;
//bottom=0
//middle=1
//top=1

答案 1 :(得分:1)

根据您在此处的描述,这是在黑暗中拍摄的照片:

  

基本上由那些声明语句的结尾变成了   中间一排,中间是它的意思,底部变成了什么   排在第一行的意思是。

当您指定middle = top++时,您要将middle分配给top的旧值,同时递增top。在第二次任务中也是如此。

答案 2 :(得分:1)

尝试以下

#include <iterator>

//...
top = someList.begin();

middle = std::next( top );

bottom = std::next( middle );

或者你可以在不使用函数std::next

的情况下编写相同的内容
top = someList.begin();

++( middle = top );

++( bottom = middle );

或更具可读性

top = someList.begin();

middle = top;
++middle;

bottom = middle;
++bottom;

或者你可以使用函数std::advance

#include <iterator>

//...
top = someList.begin();

middle = someList.begin();
std::advance( middle, 1 );

bottom = someList.begin();
std::advance( bottom, 2 );