1.list是一个双向链表,他支持双向迭代器,但不支持随机访问迭代器.
2.定义
template <
class Type,
class Allocator=allocator<Type>
>
class list
3.对于list来说当我们进行删除,添加等操作并不一定会对迭代器进行影响(尤其是不影响begin和end)。所以这跟vector不一样。
对于list来说无论进行如何的删除他的end都是不变的。而begin则有可能会边
3.特别函数
(1). 删除指定的元素或者满足条件的元素
void remove(
const Type& _Val
); //删除等于_Val的所有元素。这个函数不同于算法的remove,成员函数会删除元素以及分配的内存
template<class Predicate>
void remove_if(
Predicate _Pred //函数对象,跟算法remove_if的定义相同
)
(2).反转所有元素
void reverse( );
(3).容器的排序
void sort( ); //元素必须实现<操作符(这跟算法sort不同), 当两个元素比较返回为true时,则左边排前边,右边的排后边
template<class Traits>
void sort(
Traits _Comp //函数对象, 两个元素做参数,返回true时则左边排前面,右边参数排后面
);
(4).元素的成批插入(结合)(注意这跟insert函数中的_Where是不同的,insert是从这个位置开始,而本函数是放在前面)
void splice(
iterator _Where, //将_Right中的所有元素都插入到目标的_Where的前面
list<Allocator>& _Right
);
//若是_Right与目标是相同的分配器则只是内部指针的调整,并不会析构_Right中的所以元素,但_Right中是不会再有元素了
//若_Right与目标不是相同的分配器,则是一个个的插入到_Where前,并且会销毁_Right这个list
void splice(
iterator _Where,
list<Allocator>& _Right,
iterator _First //指定从_Right中的开始位置
);
void splice(
iterator _Where,
list<Allocator>& & _Right,
iterator _First,
iterator _Last //指定从_Right中的开始和结束位置
);
(5).若相邻的两个元素相等或者满足指定条件,则删除后面那个元素(这个函数只确保相邻无重复,并不代表整个无重复)
void unique( );
template<class BinaryPredicate>
void unique(
BinaryPredicate _Pred //函数对象, 若函数返回true,则删除后面参数的元素
);
函数原形: bool Fn(const TYPE& e1, const TYPE&e2) //若e1,e2满足指定条件则删除e2
(6).将源list中的所有元素合并到目标中并删除源,合并和splice不同的是spice只是将元素插入到指定位置的前面,而merge不是单纯的插入。而是源将按 <比较的顺序插入目标的适当位置。 即源的第一个比较目标的第一个,若源小于目标则源放在目标的前面,而大于则目标继续下一个。
void merge(
list<Type, Allocator>& _Right //元素必须实现<操作,且源在左边目标在右边,若源小于目标则源插入目标的前面
);
template<class Traits>
void merge(
list<Type, Allocator>& _Right,
Traits _Comp //函数对象, 同样两个参数,源在前面,目标在后面,若函数调用返回true,则将源插入到目标的前面
);
函数原形: bool Fn(const TYPE& src, const TYPE& dest)
merge调用后源将被清空.
例:
10, 2, 44, 23
20, 3, 35
合并的结果为: 10, 2, 20, 3, 35, 44, 23
这个函数调用一般是用在两个有序的链表的合并
(7).insert,erase函数的返回
iterator insert(
iterator _Where, //增加并插入到指定位置的前面, 若元素为空而这个参数为begin()时则函数调用后将会返回新的begin了而不能用原来的begin了,若不为
//begin则函数调用后begin不会变
const Type& _Val
); //函数返回新插入元素所在的迭代器
void insert(
iterator _Where, //将_Count插入_Where的前面
size_type _Count,
const Type& _Val
);
template<class InputIterator>
void insert(
iterator _Where,
InputIterator _First,
InputIterator _Last
);
iterator erase(
iterator _Where //删除指定位置元素,并返回下一个元素的迭代, 这里不能是end()。而当删除begin()后begin将会改变否则不会改变
);
iterator erase(
iterator _First,
iterator _Last
); //这里实际就是返回_Last