STD ::在C 中的进步不能正确地行为
std::advance in c++ do not behave correctly
当我在C 中使用std :: list时,我使用std :: Advance at Advance访问元素。下面。
#include <list>
#include<iostream>
#include<iterator>
using namespace std;
int main()
{
list<int> i;
typename list<int>::iterator t=i.begin();
i.push_front(0);
i.push_back(1);
i.push_back(2);
i.push_back(3);
cout<<*t<<" ";
advance(t,1);
cout<<*t<<" ";
advance(t,2);
cout<<*t<<" ";
}
我得到的输出是0 0 2但是不应该输出为0 1 3
您在将任何内容添加到列表中之前要获得迭代器。线
typename list<int>::iterator t=i.begin();
等于
typename list<int>::iterator t=i.end();
t
即使将项目添加到列表之后,也会继续指向列表的结尾。因此,第一行试图解除迭代器
cout<<*t<<" "
是不确定行为的原因。在那之后发生任何事情。此后,试图理解程序的输出是没有意义的。
要解决该问题,将项目添加到列表后应该获得迭代器。
#include <list>
#include<iostream>
#include<iterator>
using namespace std;
int main()
{
list<int> i;
i.push_front(0);
i.push_back(1);
i.push_back(2);
i.push_back(3);
typename list<int>::iterator t=i.begin();
cout<<*t<<" ";
advance(t,1);
cout<<*t<<" ";
advance(t,2);
cout<<*t<<" ";
}
输出:
0 1 3
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 为什么我的for循环不能正确获取argv
- Clang-Format 不能正确分配函数参数
- 为什么相应成员不能正确访问成员函数指针
- 为什么 CSpinButtonCtrl 不能正确处理大于 1000 的数字?
- STD ::在C 中的进步不能正确地行为
- cout 不能一致地打印字符串和变量值,导致输出未对齐
- 为什么UINT64_T不能正确显示POW(2,64)-1
- 为什么函数不能正确强制转换指针(从基类到派生类)
- 为什么我的可变参数宏不能正确接受任何参数?
- 为什么 g++ 不能正确链接到指定的 -L 路径?
- 为什么我不能简单地覆盖<对的优先级队列?
- 为什么我们不能简单地复制 std::function
- 在我的CUDA运行时间计划中,CPU和GPU可以异步计算,但不能合作地计算
- 返回对象时,我不能简单地在类名后使用 {}
- 为什么不能简单地初始化(用大括号)2D std::array?
- 为什么我的 qt centralWidget(一个 QGLWidget)不能正确调整大小?
- 如果更改了,GNU make不能正确地构建头文件
- 行和字计数器函数不能正确地相加
- 在c++中似乎不能正确地向数组中添加对象