list的介绍
- list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。
- list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。
- 与其他的容器相比较来说,list在任意位置插入,删除的效率是O(1),效率较高
- list不支持随机访问,不支持operator[ ]的操作
结构如下:
list的使用
基本和vector的接口差不多,少了[ ],下面附上练习时的代码:
void printList(const list<int>& lst)
{
list<int>::const_iterator it = lst.begin();
while (it != lst.end()){
cout << *it << " ";
++it;
}
cout << endl;
}
//
//template<class T>
//void printList(const list<T>& lst)
//{
// list<T>::const_iterator it = lst.begin();
// while (it != lst.end()){
// cout << *it << " ";
// ++it;
// }
// cout << endl;
//}
//
//void test(){
// list<int> lst;
// list<int> lst2;
//
// lst.push_back(1);
// lst.push_back(2);
// lst.push_back(3);
//
// lst2.push_back(4);
// lst2.push_back(1);
// lst2.push_back(13);
//
// lst2.sort();
// //merge:和splice(拼接)一样,被合并的对象内容就变空了
// lst.merge(lst2);
// printList(lst);
// printList(lst2);
//
// lst.reverse();
// printList(lst);
//
//}
//
void test(){
list<int> lst;
lst.push_back(1);
lst.push_back(10);
lst.push_back(15);
lst.push_back(1);
lst.push_back(1);
lst.push_back(1);
printList(lst);
lst.sort();
//unique:首先需要list中的元素有序才能达到去重
lst.unique();
printList(lst);
}
//
void test(){
list<int> lst;
list<int> lst2;
lst.push_back(1);
lst.push_back(2);
lst.push_back(3);
printList(lst);
lst2.push_back(4);
lst2.push_back(5);
printList(lst2);
//拼接之后,会直接改变传入之中的内容
lst.splice(lst.begin(), lst2);
printList(lst);
printList(lst2);
//lst2:4 //lst: 5 1 2 3
lst2.splice(lst2.end(), lst, lst.begin());
//lst2:4 1 2 //lst: 5 3
lst2.splice(lst2.end(), lst, ++lst.begin(), --lst.end());
printList(lst);
printList(lst2);
lst2.remove(4);
printList(lst2);
lst2.remove(100);
printList(lst2);