l.emplace_front():从头插入元素
l.push_front():从头插入元素
l.emplace_back():从尾插入元素
l.push_back():从尾插入元素
l.merge():合并两个同类型的list中的元素,被合并的list里面的元素自动清空
l.remove():从list删除元素
l.remove_if(函数名):按指定条件删除元素
注意,这个函数只擦除元素,如果元素本身是指针,则指针指向的内存不会受到任何影响。
管理指针是用户的责任.
l.reverse():把list的元素倒转
l.sort():排序,以ASCII码值排序
l.splice(合并容器的待插入位置,被合并容器,被合并容器迭代器):将待合并容器 l2 中的指定的元素(需要用迭代器)转移到合并容器 l 的指定位置中【指定元素转移到指定位置】
l.splice(合并容器的待插入位置,合并容器,待合并容器的迭代器指向first,last):将待合并容器l2 中从下标为3的位置到末尾转移到合并容器 l 的末尾位置【指定范围元素转移到指定位置】
l.splice(合并容器的待插入位置,待合并容器):将容器 l2 的所有元素转移到容器 l 的指定位置中
l.unique():删除list中重复的元素
l.pop_back():删除链表末尾元素
l.pop_front():删除链表头元素
其余方法和vector很多相似,详见请看:C++之动态数组(Vector)中运用各类迭代器_承诺$枷锁的博客-CSDN博客
#include <iostream>
#include <cstring>
#include <list>
using namespace std;
bool func(const string& value){
if(value == "last")
return true;
return false;
}
int main()
{
list<string> l;
list<string> l2;
list<int> l_int;
list<string>::iterator it;
list<int>::iterator it_int;
//从头插入元素
l.emplace_front("first");
l2.push_front("111");
//从尾插入元素
l.emplace_back("last");
l2.push_back("222");
//指定位置插入元素
l_int.insert(l_int.begin(),1);
l_int.push_back(2);
l_int.push_back(3);
for(it=l.begin();it!=l.end();++it){
cout<<*it<<" "; //结果:first last
}
cout<<endl;
for(it_int=l_int.begin();it_int!=l_int.end();++it_int){
cout<<*it_int<<" "; //结果:1 2 3
}
cout<<endl;
//合并两个同类型的list中的元素,被合并的list里面的元素自动清空
l.merge(l2);
for(it=l.begin();it!=l.end();++it){
cout<<*it<<" "; //结果: 容器l:111 222 first last
}
cout<<endl;
for(it=l2.begin();it!=l2.end();++it){
cout<<*it<<" "; //结果: 容器l2: NULL
}
cout<<endl;
//从list删除元素
l.remove("222");
for(it=l.begin();it!=l.end();++it){
cout<<*it<<" "; //结果: 容器l:111 first last
}
cout<<endl;
//标准库算法对迭代器而不是容器进行操作。因此,算法不能(直接)添加或删除元素
//按指定条件删除元素
//注意,这个函数只擦除元素,如果元素本身是指针,则指针指向的内存不会受到任何影响。
//管理指针是用户的责任。
l.remove_if(func); //func是函数名,容器元素依次传进去,删除返回true的元素
for(it=l.begin();it!=l.end();++it){
cout<<*it<<" "; //结果: 容器l:111 first
}
cout<<endl;
//把list的元素倒转
l.reverse();
for(it=l.begin();it!=l.end();++it){
cout<<*it<<" "; //结果: 容器l:first 111
}
cout<<endl;
//排序,以ASCII码值排序
l.sort();
for(it=l.begin();it!=l.end();++it){
cout<<*it<<" "; //结果: 容器l:111 first
}
cout<<endl;
l2.push_back("000");
l2.push_back("333");
l2.push_back("333");
l2.push_back("444");
l2.push_back("555");
l2.push_back("666");
for(it=l2.begin();it!=l2.end();++it){
cout<<*it<<" "; //结果: 容器l2:000 333 333 444 555 666
}
cout<<endl;
//将容器 l2 中的指定的元素(需要用迭代器)转移到容器 l 的指定位置中
//参数1:合并容器 l 的元素插入位置,参数2:被合并容器 l2
//参数3:被合并容器 l2 的迭代器的指向
it=l2.begin();
l.splice(l.begin(),l2,it);
cout<<"容器 l:"<<endl;
//遍历容器(不改变值),枚举
for(auto i:l){
cout<<i<<" "; //结果: 容器l:000 111 first
}
cout<<endl;
it=l2.begin();
//将迭代器向后移动两位
advance(it,2);
//将容器 l2 中从下标为3的位置到末尾转移到容器 l 的末尾位置
//参数1:合并容器的元素插入位置,参数2:合并容器
//参数3:被合并容器的迭代器的指向,即first,参数4:last
l.splice(l.end(),l,it,l2.end());
cout<<"容器 l:"<<endl;
for(auto i:l){
cout<<i<<" "; //结果: 容器l:000 111 first 444 555 666
}
cout<<endl;
cout<<"容器 l2:"<<endl;
for(it=l2.begin();it!=l2.end();++it){
cout<<*it<<" "; //结果: 容器l2:333 333
}
cout<<endl;
it=l.begin();
advance(it,2);
//将容器 l2 的所有元素转移到容器 l 的指定位置中
// l.splice(l.begin(),l2);
//将容器 l2 的所有元素转移到容器 l 的指定位置(下标为2)中
l.splice(it,l2);
cout<<"容器 l23:"<<endl;
for(auto i:l){
cout<<i<<" "; //结果: 容器l:000 111 333 333 first 444 555 666
}
cout<<endl;
cout<<"容器 l2:"<<endl;
for(auto i:l2){
cout<<i<<" "; //结果: 容器l2: NULL
}
cout<<endl;
//删除list中重复的元素
l.unique();
cout<<"容器 l:"<<endl;
for(auto i:l){
cout<<i<<" "; //结果: 容器l:000 111 333 first 444 555 666
}
cout<<endl;
cout<<"容器 l2:"<<endl;
for(it=l2.begin();it!=l2.end();++it){
cout<<*it<<" "; //结果: 容器l2: NULL
}
cout<<endl;
cout<<"=================="<<endl;
// string *ptr;
// // string ptr[7];
// //返回一个读/写迭代器,指向对象的第一个元素
// //allocate():内存分配
// ptr=l.get_allocator().allocate(7);
// for(int i=0;i<l.size();++i){
// ptr[i] = "1";
// }
// // for(auto i:l){
// // cout<<i<<" ";
// // }
// // cout<<endl;
// for(int i=0;i<l.size();++i){
// cout<<ptr[i]<<" ";
// }
// cout<<endl;
l.pop_back();
l.pop_front();
for(auto i:l){
cout<<i<<" "; //结果: 容器l:111 333 first 444 555
}
cout<<endl;
return 0;
}
?
first last
1 2 3
111 222 first last
111 first last
111 first
first 111
111 first
000 333 333 444 555 666
容器 l:
000 111 first
容器 l:
000 111 first 444 555 666
容器 l2:
333 333
容器 l23:
000 111 333 333 first 444 555 666
容器 l2:
容器 l:
000 111 333 first 444 555 666
容器 l2:
==================
111 333 first 444 555