list的优缺点
链表的优点 可以对任意位置进行快速的插入和删除
缺点 遍历速度没有数组快,占用空间大
list的构建
- list<T> lst;
- list(begin,end) //将[begin,end]之间的元素拷贝给本身
- list(n,num) //将n个num拷贝给本身
- list((const)list &lst) //拷贝函数
//1
list<int> lst1;
//2
list<int> lst2(5,0);
//3
list<int> lst3(lst2.begin(),lst2.end());
//4
list<int> lst4(lst2);
list的赋值
//1 等号赋值
list<int> l1;
for(int i=0;i<10;i++)
l1.push_back(i*10);
list<int> l2;
l2=l1;
//2
list<int> l3;
l3.assign(l2.begin(),l2.end());
//3
list<int> l4;
l4.assign(6,6); // 6 6 6 6 6 6
交换
list<int> l1;
for(int i=0;i<10;i++)
l1.push_back(i*10);
list<int> l2;
l2.assign(6,6);
l1.swap(l2);//l1与l2交换
大小操作
- size() //返回元素个数
- empty() //判断是否为空
- resize(n) //重新指定容器长度长为n,若变长,则默认0填充新位置,变短,则末尾超出容器 的长度的元素删除
- resize(n,elem) //重新指定容器长度长为n,若变长,则elem填充新位置,变短,则末尾超出容 器的长度的元素删除
插入和删除
- push_back(elem); //在容器尾部加入一个元素
- pop_back(); //删除容器中最后一个元素
- push_front(elem); //在容器开头插入一个元素
- pop_front(); //从容器开头移除第一个元素
- insert(pos, elem); //在pos位置插elem元素的拷贝,返回新数据的位置。
- insert(pos,n,elem); //在pos位置插入n个elem数据,无返回值。
- insert(pos,beg, end); //在pos位置插入[beg,end)区间的数据,无返回值。
- clear(); //移除容器的所有数据
- erase(beg,end); //删除[beg,end)区间的数据,返回下一个数据的位置。
- erase(pos); //删除pos位置的数据,返回下一个数据的位置。
- remove(elem); //删隆容器中所有与elem值匹配的元素。
数据存取
- front() //返回第一个元素
- back() //返回最后一个元素
list的反转和排序
- reverse() //反转链表
- sort() //链表排序
反转链表
list<int> lst;
lst.push_back(10);
lst.push_back(80);
lst.push_back(50);
lst.push_back(70);
lst.push_back(30);//10 80 50 70 30
lst.reverse(); //30 70 50 80 10
链表排序(所有不支持随机访问迭代器的容器,不可以用标准算法)
bool compare(int a,int b){
return a>b;
}
//升序排列
lst.sort();
//降序排列
lst.sort(compare);