关于迭代器

hywxn1 2014-05-10 03:36:41
今天用迭代器输出容器里面的数据,像下面这样写能编译通过,可是输出的一直是输入的第一个数据,无法跳出while循环
while (lst.begin() != lst.end())
{
cout << *(lst.begin() )<< " ";
++lst.begin();
}
而用下面这样的写法则能正确输出没一个数据,为什么呢
auto beg = lst.begin();
auto end = lst.end();
while (beg != end)
{
cout << *beg<< " ";
++beg;
}
...全文
187 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
rmaly 2014-05-13
  • 打赏
  • 举报
回复
lst.begin() 拿的永远是第一个元素,++lst.begin() 加的是临时量
mujiok2003 2014-05-11
  • 打赏
  • 举报
回复
++lst.begin();
引用
lst.begin() != lst.end()
没有任何影响。
罗博士 2014-05-11
  • 打赏
  • 举报
回复
简单的说: lst.begin()实际上是调用了一个函数,该函数返回值是一个迭代器。 所以++lit.begin()实际上加的是该函数返回值。这个返回值实际上是主函数中的一个临时变量。 因此++的是主函数的临时变量,与lst.begin()内部没有任何关系。 下次调用,仍然会返回头结点的迭代器。
zlm0913 2014-05-10
  • 打赏
  • 举报
回复
STL list的遍历:

#include <list>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    list<double> lst;
    lst.push_back(1.1);
    lst.push_back(2.2);
    lst.push_back(3.3);

    cout << "lst: ";

    // 遍历
    list<double>::iterator it;
    for(it = lst.begin(); it != lst.end(); it++)
        cout << *it << " ";
    cout << endl;

    return 0;
}

hywxn1 2014-05-10
  • 打赏
  • 举报
回复
引用 3 楼 taodm 的回复:
楼主听说过临时变量么?
听说过啊 ,比如说函数的返回就是借助于临时量,但是了解的很少,能说具体点吗,谢了
taodm 2014-05-10
  • 打赏
  • 举报
回复
楼主听说过临时变量么?
hywxn1 2014-05-10
  • 打赏
  • 举报
回复
引用 1 楼 u012061345 的回复:
第一个片段死循环输出第一个数很正常,代码就是这样写的。 第二个片段,auto是什么?
为什么死循环呢,lst.begin()不是有递增运算吗,递增到等于lst.end()不就结束了? auto不是类型说明符吗,编译器自己推断是什么类型
罗博士 2014-05-10
  • 打赏
  • 举报
回复
第一个片段死循环输出第一个数很正常,代码就是这样写的。 第二个片段,auto是什么?

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧