【发布时间】:2012-04-30 00:27:04
【问题描述】:
我刚刚注意到 C++ 中的 std::list 类,我对此感到好奇。简而言之,它涉及列表迭代器的工作方式。考虑以下代码:
std::list<int> alist;
alist.push_back(0);
alist.push_back(1);
alist.push_back(2);
很明显,这会创建一个包含三个整数元素的列表。我可以在列表的开头定义一个迭代器,并使用它来打印第一个元素中包含的值,如下所示:
std::list<int>::iterator iter = alist.begin();
std::cout << *iter << std::endl; // Prints "0" to stdout
我觉得有点奇怪的是,如果我现在递减迭代器,它会“循环”并最终指向列表中的最后一个元素:
--iter;
std::cout << *iter << std::endl; // Prints "2" to stdout
对于应该作为双向链表实现的东西,这种行为是否合理?如果列表是一个 循环 链接列表,我非常希望迭代器会出现类似的行为,但我觉得这很奇怪。
您过去使用过的这种迭代器行为有什么实际用途吗?我应该留意与此行为相关的任何问题吗?
(顺便说一句,这发生在 gcc 4.7.0 (MinGW) 上。我还没有用任何其他版本或编译器对其进行测试。)
【问题讨论】:
-
它为我打印 -1218668059 ideone.com/3kpQf