gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:10:27 24 4
gpt4 key购买 nike

我在编写测试程序时发现了一个非常有趣的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com