-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 或者&