双向循坏链表
链表List中的迭代器只支持前移和后移
list的优点:
1、采用动态存储分配,不会像vector那样多出很多内存
2、链表的插入和删除十分方便
缺点:
1、空间和时间的耗费大
list的常见接口:
1、List的构造函数
//创建容器
list<int> l1;
l1.push_back(10);//尾插
l1.push_front(9);//头插
l1.push_back(11);
for (list<int>::iterator it = l1.begin(); it != l1.end(); it++) {
cout << *it << endl;
}
//区间方式构造
list<int> l2(l1.begin(), l1.end());
//拷贝构造
list<int> l3(l2);
//10个一千
list<int> l4(4, 1000);
2、list赋值和交换
//创建容器
list<int> l1;
l1.push_back(10);//尾插
l1.push_front(9);//头插
l1.push_back(11);
list<int> l2;
l2.assign(l1.begin(), l1.end());//拷贝赋值
l2.assign(10, 1000);//将10个1000赋值给l2
l1 = l2;//把l2的值赋给l1
l1.swap(l2);//l1和l2的元素互换
3、list容器大小的操作
//创建容器
list<int> l1;
l1.push_back(10);//尾插
l1.push_front(9);//头插
l1.push_back(11);
list<int> l2;
int len = l1.size();//list容器元素的个数
bool t = l1.empty();//判断是否为空
l1.resize(10);//重新指定容器长度
l1.resize(10, 20);//重新指定容器大小,并赋值为20
4、list插入和删除
push_back,push_back,insert函数,erase函数
remove(elem);//删除容器中和elem一样的值的元素
5、List容器的存取
front();back();//返回第一个元素,和返回最后一个元素
List容器不支持[]存取,因为list是个双向迭代器,是链表
可以使用迭代器的方式进行取,不支持【】和随机访问,只能it++和it--,不可以it+2
6、list的反转和排序
bool cmp(int v1,int v2) {
return v1 > v2;
}
void test01() {
//创建容器
list<int> l1;
l1.push_back(10);//尾插
l1.push_front(26);//头插
l1.push_back(110);
for (list<int>::iterator it = l1.begin(); it != l1.end(); it++) {
cout << *it << " ";
}
cout << endl;
l1.reverse();//反转
//所有不支持随机访问的迭代器的容器,不可以用标准算法
//不支持随机访问的迭代器的容器,内部会提供对应的排序算法
l1.sort();//默认排序为从小到大
l1.sort(cmp);//使用cmp进行其他的排序顺序
}