void testr() { list<int>L6; L6.push_back(10); L6.push_back(30); L6.push_back(40); //判断容器是否为空 if (L6.empty()) { cout << "list 为空" << endl; } else { cout << "lsit 不为空,元素个数为:" << L6.size() << endl; } //重新指定大小 L6.resize(6, 100); printInfo(L6); L6.resize(3); printInfo(L6); }
2.4、 list 插入和删除
用于对 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值匹配的元素
示例:
void testt() { list<int>L7; //尾插 L7.push_back(1); L7.push_back(2); L7.push_back(3); //头插 L7.push_front(30); L7.push_front(20); L7.push_front(10); printInfo(L7); //插入 insert list<int>::iterator t = L7.begin(); L7.insert(++t, 6); //删除 erase t = L7.end();//end迭代器指向最后一个有效元素的下一个位置 L7.erase(--t); printInfo(L7); //移除 L7.push_back(10000); L7.push_back(10000); printInfo(L7); L7.remove(10000); printInfo(L7); //清空 L7.clear(); if (L7.empty()) { cout << "list 已经清空" << endl; } }
2.5、list 数据存取
用于对 list容器中数据进行存取
函数原型:
front();
返回第一个元素。
back();
返回最后一个元素。
示例:
void testy() { list<int>L1; L1.push_back(10); L1.push_back(20); L1.push_back(30); L1.push_back(50); //访问首尾元素 cout << "第一个元素值为:" << L1.front() << endl; cout << "最后一个元素值为:" << L1.back() << endl; //不支持下标访问,也不支持随机访问,底层是链表 list<int>::iterator it = L1.begin(); it++;//正确 //it + 1;//错误,不存在与"+"匹配的运算符 }
2.6、list 反转和排序
将容器中的元素反转,以及将容器中的数据进行排序
函数原型:
reverse();
反转链表
sort();
链表排序
反转示例:
void testu() { list<int>L1; L1.push_back(10); L1.push_back(20); L1.push_back(30); cout << "反转前:" << endl; printInfo(L1); cout << "反转后:" << endl; L1.reverse(); printInfo(L1); }
排序示例:
//用于降序排序 bool myCompare(int v1, int v2) { //降序:让第一个数 > 第二个数 return v1 > v2; } void testi() { list<int>L; L.push_back(2); L.push_back(1); L.push_back(6); L.push_back(4); L.push_back(5); L.push_back(3); cout << "排序前:" << endl; printInfo(L); cout << "升序排序后:" << endl; L.sort(); printInfo(L); cout << "降序排序后:" << endl; L.sort(myCompare); printInfo(L); }
所有不支持随机访问迭代器的容器,不可以使用标准算法
这些容器内部会提供排序的成员方法
sort是 list容器内部的排序方法,默认为升序排列,可以通过自己编写函数来决定排序的规则。
3、排序案例
3.1、生肖类
class Person { public: Person(string name, int age, int height) { this->name = name; this->age = age; this->height = height; } //属性 string name; int age; int height; };
3.2、排序规则
//自定义排序规则 compare bool compare(Person& p1, Person& p2) { //按照身高降序 if (p1.height == p2.height) { //如果身高相同,按照年龄升序排序 return p1.age < p2.age; } else { return p1.height > p2.height; } }
3.3、具体实现与效果
//自定义排序规则 compare bool compare(Person& p1, Person& p2) { //按照身高降序 if (p1.height == p2.height) { //如果身高相同,按照年龄升序排序 return p1.age < p2.age; } else { return p1.height > p2.height; } }
list容器在泛型编程里还是比较重要的,希望我的分享可以给大家带来帮助,最后要个赞不过分吧