我有一个对象的链接列表,其中每个对象都有char
的链接列表。
我宣布了三个迭代器:
top = someList.begin();
middle = top++;
bottom = middle++;
当我打印每个迭代器的列表时,它与完整列表的内容不匹配。
基本上,在那些声明语句的末尾,top变为中间行,mid是它的意思,bottom是最高行的意思。
我假设这是我用增量声明迭代器的方式。非常感谢任何帮助。
答案 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 );