STL list容器API
阅读原文时间:2023年07月09日阅读:2

list容器:链表容器,不支持随机遍历。不能用通用的sort算法(要有随机访问迭代器),容器自己有排序算法

#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
using namespace std;

void printList(const list &mylist){

for (list<int>::const\_iterator it = mylist.begin(); it != mylist.end(); ++it){  
    cout << \*it << " ";  
}  
cout << endl;  

}

//1. list构造函数
/*
list lstT;//list采用采用模板类实现,对象的默认构造形式:
list(beg,end);//构造函数将[beg, end)区间中的元素拷贝给本身。
list(n,elem);//构造函数将n个elem拷贝给本身。
list(const list &lst);//拷贝构造函数。
*/
void test01(){

//list迭代器是双向迭代器,  
list<int> mylist(10, 1);  
list<int> mylist2(mylist.begin(), mylist.end());  
printList(mylist);

list<int>::iterator it;  
//sort(mylist.begin(), mylist.end()); //sort算法不能对list容器排序  
mylist.sort();  

}

//2. list数据元素插入和删除操作
/*
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值匹配的元素。
*/

bool mycompare(int val){
return val > 50;
}

void test02(){

list<int> mylist;  
mylist.push\_back(10);  
mylist.push\_back(20);  
mylist.push\_back(30);  
mylist.push\_back(40);  
mylist.push\_back(50);  
mylist.push\_front(100);  
mylist.push\_front(200);  
mylist.push\_front(300);  
mylist.push\_front(400);

vector<int> v;  
v.push\_back(1000);  
v.push\_back(2000);

mylist.insert(++mylist.begin(), v.begin(), v.end());

printList(mylist);  
mylist.push\_back(300);  
mylist.push\_back(300);

printList(mylist);

//mylist.remove(300);  
mylist.remove\_if(mycompare);

printList(mylist);

}

//3. list赋值操作 list数据的存取
/*
assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。
assign(n, elem);//将n个elem拷贝赋值给本身。
list& operator=(const list &lst);//重载等号操作符
swap(lst);//将lst与本身的元素互换。
front();//返回第一个元素。
back();//返回最后一个元素。

*/

void test03(){

list<int> mylist;  
mylist.assign(10,10);  
printList(mylist);

cout << mylist.front() << endl;  
cout << mylist.back() << endl;

}

//4. list反转排序
/*
reverse();//反转链表,比如lst包含1,3,5元素,运行此方法后,lst就包含5,3,1元素。
sort(); //list排序
*/

bool canbucanswap(int v1,int v2){
return v1 > v2;
}
void test04(){

list<int> mylist;  
mylist.push\_back(10);  
mylist.push\_back(40);  
mylist.push\_back(30);  
mylist.push\_back(50);  
mylist.push\_back(20);

printList(mylist);  
mylist.reverse();  
printList(mylist);

//排序  
mylist.sort(canbucanswap);  
printList(mylist);  

}

//list容器迭代器类型要清楚,还要直到list容器是自己提供排序算法,通用的sort算法不能对list排序

int main(){

//test01();  
//test02();  
//test03();  
test04();

system("pause");  
return EXIT\_SUCCESS;  

}

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器