list容器会了吗?一文搞定它

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 多得(或扫描京东二维码)查看详情吧!

猜你喜欢

转载自blog.csdn.net/2202_75623950/article/details/131132567