c++ - std::list 是一个循环列表!!等等,什么?

标签 c++ algorithm list containers stdlist

我在编写测试程序时发现了一个非常有趣的 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 是循环列表吗?

最佳答案

不,std::list 不是循环的。当您递减该迭代器时,您的代码具有未定义的行为。当您调用 std::distance(mylist.end(), mylist.begin()) 时,它也有未定义的行为,因为 mylist.begin() 无法通过递增 mylist.end()

请注意,当您调用未定义的行为时,std::list 很可能看起来是循环的,因为“std::list appearing to be cyclic”在允许的行为范围内行为未定义。该范围是任何行为。

关于c++ - std::list 是一个循环列表!!等等,什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25932425/

相关文章:

c++ - QByteArray 到 QString

java - k 均值和 c 均值之间的差异

C# 按模式重新排列列表

python - 使用字符串、列表和字典进行操作

c++当在 map 中找不到条目时

c++ - 如何在C++中生成随机数?

c++ - 可以使用移动/交换 c++11 来延长返回的临时变量的生命周期吗

algorithm - 比较两个数据结构的相似性

algorithm - 这个修改后的选择排序算法的运行时间是多少?

java - ArrayList toString() 方法