c++入门之list了解及使用

目录

一、list的底层结构

二、list的构造函数

三、迭代器

四、list的公有成员函数

[(一)push_back(const value_type& val)和push_front(const value_type& val)](#(一)push_back(const value_type& val)和push_front(const value_type& val))

[(二)resize(size_type n, value_type val = value_type())](#(二)resize(size_type n, value_type val = value_type()))

①size变大

②size变小

(三)merge (list& x)


一、list的底层结构

双向带头循环链表

二、list的构造函数

cpp 复制代码
list<int> lt1;   //default (1)	
list<int> lt2(10, 1);  //fill (2)	
vector<int> v1 = { 1,2,3,4,5 };  	
list<int> lt3(v1.begin(), v1.end()); //range (3)
list<int> lt4(lt1); //copy (4)
cpp 复制代码
list<int> lt5 = { 1,2,3,4,5,6,1,1,1,1 };  //list也可以像vector<int> v1 = { 1,2,3,4,5 };一样初始化
int a[] = { 1,20,3,40 };
list<int> lt6(a, a + 4);
sort(a, a + 4);

三、迭代器

封装,通用的相似的遍历容器的方式,并且封装屏蔽容器结构的差异和底层的细节

通用/复用,实现算法时用迭代器函数模板方式实现,和底层容器结构解耦

cpp 复制代码
	list<int>::iterator it5 = lt5.begin();
	while (it5 != lt5.end())
	{
		cout << *it5 << " ";
		++it5;
	}
	cout << endl;

	for (auto e : lt5)
	{
		cout << e << " ";
	}
	cout << endl;
	sort(a, a + 4);
	sort(v1.begin(), v1.begin());
	//sort(lt3.begin(), lt3.end());  //不能用,要求是随机迭代器
	reverse(v1.begin(), v1.end());
	reverse(lt3.begin(), lt3.end());

四、list的公有成员函数

(一)push_back(const value_type& val)和push_front(const value_type& val)

cpp 复制代码
list<int> lt1(10, 1);
lt1.push_back(10);
lt1.push_front(10);
for (auto e : lt1)
{
	cout << e << " ";
}
cout << endl;

(二)resize(size_type n, value_type val = value_type())

①size变大

会将无值部分赋值为指定值或者默认值

cpp 复制代码
lt1.resize(20, 2);
for (auto e : lt1)
{
	cout << e << " ";
}
cout << endl;

②size变小

会将多余值去掉

(三)merge (list& x)

合并规则:默认用小于号<比较元素,要求thisx两个链表本身都已经按升序排好序,合并后当前链表依旧保持升序有序。

cpp 复制代码
std::list<double> first, second;
first.push_back(3.1);
first.push_back(2.2);
first.push_back(2.9);

second.push_back(3.7);
second.push_back(7.1);
second.push_back(1.4);

first.sort();
second.sort();

first.merge(second);
for (auto e : first)
{
	cout << e << " ";
}
cout << endl;

四、remove (const value_type& val)

删除容器中所有值等于 val 的元素。

cpp 复制代码
std::list<double> lt1 = { 1,2,3,4,5,6,2,3,2 };
lt1.remove(2);
for (auto e : lt1)
{
	cout << e << " ";
}
cout << endl;
相关推荐
白狐_79810 小时前
408数据结构第5章:二叉树遍历序列题——技巧、判断与真题型总结
数据结构
Forever Nore13 小时前
学完C语言力扣第一题做不来正常吗
数据结构·算法
旖旎夜光16 小时前
LeetCode 11:盛最多水的容器(双指针问题) —— 题解
数据结构·c++·算法·leetcode·双指针
不一样的故事12617 小时前
芯片设计是一个高度复杂、分工精细的系统工程
数据结构·经验分享
梁辰兴18 小时前
软件工程:面向数据结构的设计方法
数据结构·软件工程·梁辰兴·面向数据结构的设计方法·jackson方法·warnier方法·方法比较
白狐_79819 小时前
408数据结构第7章:查找②——顺序、折半、分块查找秒杀 + 真题
数据结构·算法
hold?fish:palm20 小时前
链表的基本原理和实现(C++版本)
数据结构·c++·链表
码完就睡20 小时前
数据结构——树、二叉树基础概念
数据结构·算法
疯狂打码的少年1 天前
【数据结构】栈:定义、顺序栈与链式栈
数据结构·笔记
wabs6661 天前
关于图论【最短路径之Bellman_ford 算法|卡码网94.城市间货物运输的思考】
数据结构·算法·图论·卡码网·bellman_ford·求最短路径