zoukankan      html  css  js  c++  java
  • C++ STL 中list是双向循环链表中循环可以实现什么功能?

    C++ STL 中list是双向循环链表,双向可以理解,有两个指针域,指向前一结点和指向后一结点,双向可以实现从末尾结点到头结点的遍历,但循环实现什么功能?

    错误代码:

    #include<list>
    #include<iostream>
    int main()
    {
        list<int> li;
        for(int i=0;i<5;++i)
            li.push_back(i);
        list<int>::iterator it=li.end();
        cout<<*(--it);//输出4
        cout<<*(++it);//若为循环链表,不是应该回到头结点吗?实际输出错误!
        //若为循环链表,那end()是指向哪里? 
        return 0;
    } 
    

    链表的内存结构是循环的,每一个来节点(node)结构,node结构包含一个指向之前节点的指针,另外一个指向之后的节点,以及一个数据元素(你这里是int),所以一个node结构自己是不知道自己是list中的第几个(没有储存相应的信息)。
    但是,最末一个node,它的后指针是指向链表的终结记号,然后终自结记号的node也有一个指针,才指向list的第一个node。所以,++it指向的是终结记号,上面是没有数据的,当然输出错误。
    说双向的意思是:你可以在首端加入新的数据node,也可以在末端加入新的数据node,但不表示你可以无限循环的遍历它。
    另外,List模板,不建议你使用iterator(迭代器),因为每一个node都不知道自己是第几个node,如果你使用迭代器指定你要访问第n个node的数据,它总是从首元素开始一个个数到第n,然后才返回数据给你。最好把链表当作动态的栈来zhidao使用,只访问或者增删头端或者尾端的数据,这样速度快。

  • 相关阅读:
    关于在调用JAVAFX相关包时遇到Access restriction: The type 'Application' is not API (restriction on required library)的解决方法
    JS 获取随机颜色值
    JS jQuery 点击页面漂浮出文字
    JQ 获取浏览器窗口宽高
    JQ 操作css
    JQ 遍历--(祖先,后代,同胞,过滤)
    JQ DOM元素 创建 添加 删除
    jQuery 效果
    3
    webpack 打包CSS 引入图片
  • 原文地址:https://www.cnblogs.com/litifeng/p/12962949.html
Copyright © 2011-2022 走看看