我正在写一个测试程序,并发现一个非常有趣的案例std::list
的行为。std :: list是一个循环列表!等等,什么?
#include <list>
#include <algorithm>
#include <iostream>
int main()
{
std::list<int> mylist;
std::list<int>::iterator iter;
for(int i=3; i<10; ++i){
mylist.push_back(i);
}
iter = mylist.begin();
iter--;
iter--;
std::cout<<*iter<< std::endl;
std::cout<<std::distance(mylist.end(), mylist.begin())<<std::endl;
}
输出是:
9
1
如果我没有记错的话,这种行为是有关循环清单。我从未见过论坛,书籍或讨论,其中提到标准列表是一个循环列表。我的GCC版本是4.1.2。 那我正确吗?是标准的std::list
一个循环列表?
以及为什么结束和开始之间的距离是1? – 2014-09-19 11:04:30
@EduardRostomyan:您对'std :: distance'的调用也是未定义的行为。 – 2014-09-19 11:05:18
如何确定?因为当我在这种情况下计算向量的距离时,该函数返回一个负数。 – 2014-09-19 11:07:09