list链表容器
List 容器是一个双向链表
list容器的迭代器是:双向迭代器
相较于 vector 的连续线性空间,list 就显得负责许多,它的好处是每次插入或者删除一个元素,就是配置或者释放一个元素的空间。对于任何位置的元素插入或元素的移除,list 永远是常数时间。
list的应用
代码的使用以及代码含义都在代码块中注释 其余应用函数和其它容器相同
front(); | 返回第一个元素。 |
back(); | 返回最后一个元素。 |
reverse(); | 反转链表。 |
sort(); | list 排序 |
push_back(elem); | 在容器尾部加入一个元素 |
push_front(elem); | 在容器开头插入一个元素 |
pop_back(); | 删除容器中最后一个元素 |
pop_front(); | 从容器开头移除第一个元素 |
insert(pos,n,elem); | 在 pos 位置插入 n 个 elem 数据,无返回值 |
remove(elem); | 删除容器中所有与 elem 值匹配的元素。 |
#include<list>
#include<algorithm> //算法的头文件
void printListInt(list<int> &li){ //打印list容器内容
list<int>::iterator it = li.begin();
for(;it!=li.end();it++){
cout<<*it<<" ";
}
cout<<endl;
}
void test03(){
list<int> li;
//1. push_back(elem); 在容器尾部加入一个元素
li.push_back(10); //尾插
li.push_back(20);
li.push_back(30);
//2.push_front(elem); 在容器开头插入一个元素
li.push_front(40); //头插
li.push_front(50);
li.push_front(60);
printListInt(li); //60,50,40,10,20,30
list<int>::iterator it=li.begin(); //迭代器
it++; //迭代器++
it++;
//3.insert(pos,n,elem); 在 pos 位置插入 n 个 elem 数据,无返回值
li.insert(it,3,100); //2个++的位置插入3个100
printListInt(li); //60,50,100,100,100,40,10,20,30
//4.remove(elem); 删除容器中所有与 elem 值匹配的元素。
li.remove(100); //将内容为100的节点删除
printListInt(li); //移除3个100 60,50,40,10,20,30
//5.reverse(); 反转链表。
li.reverse(); //元素反转
printListInt(li); // 30 20 10 40 50 60
//sort(li.begin(),li.end()); //list容器不支持算法的排序
li.sort(); //list提供的排序
printListInt(li); // 10 20 30 40 50 60
}