1.关键概述
list 是定义在 namespace::std 的模板,声明在 <list> ,存储结构是 双向链表, 提供的 正向和反向迭代器。
2.构造list对象
list<int> intlist0; // 构造一个空list list<int> intlist1(3); // 构造3个元素的 list,元素使用默认构造 list<int> intlist2(3, 2); // 构造3个元素的list, 元素初始化为3 list<int> intlist3(3, 1, intlist2.get_allocator()); // 构造一个3元素list,初始化为1,并使用intlist的内存分配策略 list<int> intlist4(intlist2); // 拷贝构造
3.元素的增删
front(); // 返回第一个元素,(不检查容器是否为空) back(); // 返回最后元素(不检查容器是否为空) pop_back(); pop_front(); push_back(); push_front(); assign(); // 擦除链表元素,并复制新元素 empty();
4.迭代器访问list中元素
begin();
end();
rbegin();
rend();
list<int>::reverse rintiter = intlist.rbegin(); // 逆向迭代器的初始化
4.操作list中元素
clear(); erase(position) // 删除迭代器position指向的元素 erase(beg, end) // 删除 beg 到 end-1 的元素 insert(position, elem); // 将elem插入到 position指向位置,并返回新元素位置 insert(position, beg, end); resize(num); // 改变size,如果元素增加使用默认构造函数 resize(num, elem); size(); max_size();
5.list算法
merge() // 合并两个有序链表,并使之有序 sort() // 默认升序,可以自定义回调函数 reverse() remove() remove_if() // 参数为谓词,删除满足谓词的元素 splice() // 删除相邻重复元素 swap() // 交换两个链表
对于void remove_if( _Predicate ) 参数为谓词,谓词可以用函数指针或函数对象表达。
template<class T> class is_odd:public unary_function<T, bool> { public: bool operator() (T &val) { return (val % 2); } }; int main() { list<int> intlist; for (int i = 10; i > 0; i--) { intlist.push_back(i); } intlist.remove(1); for (list<int>::iterator iter = intlist.begin(); iter != intlist.end(); iter++) { cout << *iter << " "; } cout << "\n"; intlist.remove_if(is_odd<int>()); for (list<int>::iterator iter = intlist.begin(); iter != intlist.end(); iter++) { cout << *iter << " "; } cout << "\n"; return 0; }