list 数据链式存储
list的优点
1.采用动态存储分配,不会造成内存浪费和溢出
2.链表执行插入和删除操作十分简单,修改指针即可,不需要移动大量元素
缺点:
时间(遍历)和空间(指针域)额外耗费大
重要性质:list在插入删除操作时不会造成原有list迭代器的失效,vector不成立
list构造函数 (deque)和前面的一模一样构造
list容器赋值和交换
大小操作
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
#include<list>
empty()
判断容器是否为空
capacity()
容器的容量
size()
返回容器中元素的个数
resize(int num)
重新指定容器的长度为num,
如果容器变长则以默认值填充新位置
如果容器变短,则末尾超过容器长度的元素删除
resize(int num,elem)
重新指定容器的长度为num,
如果容器变长则以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位置的数据,返回下一个数据的位置2
remove(elem)
删除容器中所有与elem元素匹配的数据
list数据存取
函数原型:
front();
访问第一个数据
back();
访问最后一个数据
list、本质是链表,数据不是连续的线性空间存储
不支持随机访问 比如采用L[],L.at();deng
迭代器只能进行(双向)++,–,不支持随机访问
list容器的反转和排序
/*
void printlist(list<int>& l)
{
for (list<int>::iterator it = l.begin(); it !=l.end(); it++)
{
cout << *it<<" ";
}
cout << endl;
}
void test()
{
list<int>l;//默认构造
l.push_back(10);
l.push_back(20);
l.push_back(30);
printlist(l);
list<int>l1;
l1 = l;//operatr= 赋值
printlist(l1);
//assign赋值
list<int>l2;
l2.assign(10, 100);
printlist(l2);
//jiaohua
l1.swap(l2);
printlist(l1);
printlist(l2);
}
bool compere(int val,int vall)
{
return val > vall;
}
void test01()
{
list<int>l2;
l2.push_back(10);
l2.push_back(30);
l2.push_back(20);
l2.push_back(60);
printlist(l2);
//反转:
l2.reverse();
printlist(l2);
//排序:
//所有不支持随机访问的迭代器容器 不可以用标准算法
//内部提供算法 变成调佣函数 (成员函数)
//错误:sort(l2.begin(), l2.end());
l2.sort(); //升序
printlist(l2);
//降序?提供一个函数
l2.sort(compere);
printlist(l2);
}
*/
//排序案例:::
//排序遍历,自定义类型排序,高级排序
/*
class person
{
public:
person(int age,int high, string name)
{
this->age = age;
this->high = high;
this->name = name;
}
int age;
string name;
int high;
};
void printlist(list<person>& l)
{
for (list<person>::iterator it = l.begin(); it != l.end(); it++)
{
cout << "年龄:" << it->age << "身高:" << it->high << "姓名:" << it->name;
cout << endl;
}
}
bool compere(person p1,person p2)
{
if (p1.age == p2.age)
{
return p1.high < p2.high;
}
return p1.age > p2.age;//此时按年龄来降序了
}
void test02()
{
person p1(20, 180, "小洁洁");
person p2(22, 178, "小前钱");
person p3(20, 160, "小短短");
person p4(20, 170, "小中中");
person p5(23, 190, "小大大");
list<person>l;
l.push_back(p1);
l.push_back(p2);
l.push_back(p3);
l.push_back(p4);
l.push_back(p5);
printlist(l);
//paixu:
//直接调用l.sort();会出错,因为编译器不知道按什么来排序
//l.sort();
cout << endl;
l.sort(compere);
printlist(l);
}
int main()
{
//test01();
//test();
test02();
system("pause");
return 0;
}
此外如果大家有购书需求,欢迎大家考虑一下清华社,直接以最低的价格买到最好的书!
618,清华社 IT BOOK 多得图书活动开始啦!活动时间为 2023 年 6 月 7 日至 6 月 18 日,
清华社为您精选多款高分好书,涵盖了 C++、Java、Python、前端、后端、数据库、算法与机器学习等多个 IT 开发领域,适合不同层次的读者。全场 5 折,扫码领券更有优惠哦!
快来京东点击链接 IT BOOK 多得(或扫描京东二维码)查看详情吧!