list容器详解

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: list 数据进行链式存储 list的优点 1.采用动态存储分配,不会造成内存浪费和溢出2.链表执行插入和删除操作十分简单,修改指针即可,不需要移动大量元素缺点:时间(遍历)和空间(指针域)额外耗费大重要性质:list在插入删除操作时不会造成原有list迭代器的失效,vector不成立list构造函数 (deque)和前面的一模一样构造list容器赋值和交换大小操作: empty() 判断容器是否为空capacity() 容器的容量size() 返回容器中元素的个数resize(int num) 重新指定容器的长
#include<iostream>


 #include<algorithm>

#include<string>
using namespace std;
#include<list>

/*
list 数据进行链式存储

list的优点

1.采用动态存储分配,不会造成内存浪费和溢出
2.链表执行插入和删除操作十分简单,修改指针即可,不需要移动大量元素

缺点:

时间(遍历)和空间(指针域)额外耗费大

重要性质:list在插入删除操作时不会造成原有list迭代器的失效,vector不成立

list构造函数 (deque)和前面的一模一样构造

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& l)
{
for (list::iterator it = l.begin(); it !=l.end(); it++)
{
cout << *it<<" ";
}
cout << endl;
}

void test()
{
listl;//默认构造
l.push_back(10);
l.push_back(20);
l.push_back(30);
printlist(l);
listl1;
l1 = l;//operatr= 赋值
printlist(l1);
//assign赋值
listl2;
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()
{
listl2;
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);

}
*/

//paixu案例:::
//排序遍历,自定义类型排序,高级排序
/*
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& l)
{
for (list::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, "小大大");
listl;
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;
}

目录
相关文章
|
3天前
|
编译器 C++ 容器
【C++/STL】:list容器的深度剖析及模拟实现
【C++/STL】:list容器的深度剖析及模拟实现
10 2
|
6天前
|
存储 算法 C++
C++一分钟之-容器概览:vector, list, deque
【6月更文挑战第21天】STL中的`vector`是动态数组,适合随机访问,但插入删除非末尾元素较慢;`list`是双向链表,插入删除快但随机访问效率低;`deque`结合两者优点,支持快速双端操作。选择容器要考虑操作频率、内存占用和性能需求。注意预分配容量以减少`vector`的内存重分配,使用迭代器而非索引操作`list`,并利用`deque`的两端优势。理解容器内部机制和应用场景是优化C++程序的关键。
20 5
|
3天前
|
存储 C++ 容器
【C++/STL】:list容器的基本使用
【C++/STL】:list容器的基本使用
9 1
|
1天前
|
存储 C++ 容器
C++之list容器
C++之list容器
4 0
|
1月前
|
存储 C++ 容器
黑马c++ STL部分 笔记(7) list容器
黑马c++ STL部分 笔记(7) list容器
|
1月前
|
调度 C++ 容器
【C++】手搓 list 容器
本文我们实现了STL库中重要的list 的模拟实现,其中最重要莫过于迭代器的封装类的书写,这是前所未有的操作(对于我来说,我是第一次使用这种结构)。通过list 的模拟实现也帮我们巩固了类与对象的知识,也强化了指针操作的思路。欢迎大家讨论分析。
17 1
|
1月前
|
存储 安全 Java
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
20 0
|
1月前
|
索引 容器
06-python数据容器-list列表定义/list的10个常用操作/列表的遍历/使用列表取出偶数
06-python数据容器-list列表定义/list的10个常用操作/列表的遍历/使用列表取出偶数
|
1月前
|
存储 C语言 C++
C++中STL常用容器(vector、deque、list、map、set)一文带你了解
C++中STL常用容器(vector、deque、list、map、set)一文带你了解
|
1月前
|
存储 算法 测试技术
【C++】容器篇(二)——List的基本概述以及模拟实现
【C++】容器篇(二)——List的基本概述以及模拟实现