List 使用记录

来源:互联网 发布:知乎 全员加速中 编辑:程序博客网 时间:2024/06/15 22:13

-Introduction : 本文开始记录关于list结构的使用技巧总结,可能会涉及一些initial_list的内容


删除list中某个特定元素
- 1.遍历,最好使用begin + end的方式遍历
- 2.避免断链问题

     for ( Itor = MyList.begin(); Itor != MyList.end(); )     {         if ( *Itor == 4 )         {             Itor = MyList.erase(Itor);             //注意,这里一定要这么写             //不能写 MyList.erase(Itor)  否则出现断链问题         }         else         {             Itor++;         }     }

错误记录:

  • (1). 删除列表元素,是一定会修改列表内容的,因此在删除函数的形参位置,不能写const关键字

    • void delete_element_in_list(const list<char> &list1) 这种写法,因为会修改列表元素,不行

    • void delete_element_in_list(const A &anA) 且A中包含要删除的list,修改了内容,不可以的

  • (2). 执行对象要求是const typename* &anA 的时候不能使用 “this”关键字来代替,原因是这样的内容必须是一个lvalue

    • 不是很明白为什么,但是把”&”关键字删掉,const关键字保留,这里就可以填写this
    • 总而言之,this就是不能成为,像普通变量那样的,顺利嵌套进 const + &的结构
    • this 最多只能成为const 但是不能成为 & -> 原因: 只有变量才可以使用 &的方法

    • 问题总结:this关键字代表的是一种类似常量的 “右值”,但是&符号仅针对左值才能使用

    • 但是右值左值的转换是很麻烦的操作,相比之下,放弃使用&符号,或者用&但是不用this划算很多

    • list的使用 const与&结合使用,但是单个对象就可以单独使用const 或者&