C++——list的简介及使用

这篇具有很好参考价值的文章主要介绍了C++——list的简介及使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

list的简介

list文档

  1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。
  2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。
  3. list与forward_list非常相似:主要不同在于forward_list是单链表,只能单方向迭代。
  4. 与其他的序列式容器相比(array,vector,deque),list在任意位置进行插入、移除元素的执行效率更好。
  5. 与其他序列式容器相比,list和forward_list最大的缺陷是不支持任意位置的随机访问,比如:要访问list的第6个元素,必须从已知的位置(比如头部或者尾部)迭代到该位置。
  6. list还需要一些额外的空间,以保存每个节点的相关联信息。

list的使用

list 的构造

C++——list的简介及使用

list<int> lt1;	// 构造int类型的空容器
list<int> lt2(3, 2);  // 构造含有3个2的int类型容器
list<int> lt3(lt2);  // 拷贝构造lt2
string s("hello");
list<char> lt4(s.begin(), s.end());  // 利用迭代器构造

list 插入和删除数据

C++——list的简介及使用

push_front和pop_front

int main()
{
	list<int> lt;
	// 头插数据
	lt.push_front(1);
	lt.push_front(2);
	lt.push_front(3);
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl;
	// 头删数据
	lt.pop_front();
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl; 
	return 0;
}

C++——list的简介及使用

push_back和pop_back

int main()
{
	list<int> lt;
	// 尾插数据
	lt.push_back(1);
	lt.push_back(2);
	lt.push_back(3);
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl; 
	// 尾删数据
	lt.pop_back();
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl;
	return 0;
}

C++——list的简介及使用

insert

list的insert支持三种插入方式

  1. 在指定位置插入数据。
  2. 在指定位置插入n个值为val的数。
  3. 在指定位置插入一段迭代器区间(左闭右开)。
int main()
{
	list<int> lt;
	lt.push_back(1);
	lt.push_back(2);
	lt.push_back(3);
	list<int>::iterator pos = find(lt.begin(), lt.end(), 2);
	lt.insert(pos, 4); //在2的位置插入9
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl; 

	pos = find(lt.begin(), lt.end(), 3);
	lt.insert(pos, 3, 5); //在3的位置插入3个5
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl;

	vector<int> v{ 6, 6 };
	pos = find(lt.begin(), lt.end(), 1);
	lt.insert(pos, v.begin(), v.end()); //在1的位置插入2个6
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl;
	return 0;
}

C++——list的简介及使用

erase

erase有两种删除方式

  1. 删除指定位置数据
  2. 删除指定迭代器区间中的数据。
int main()
{
	list<int> lt;
	lt.push_back(1);
	lt.push_back(2);
	lt.push_back(3);
	lt.push_back(4);
	list<int>::iterator pos = find(lt.begin(), lt.end(), 2);
	lt.erase(pos); // 删除2
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl;

	pos = find(lt.begin(), lt.end(), 3);
	lt.erase(pos, lt.end()); //删除3及其之后的元素
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl;
	return 0;
}

C++——list的简介及使用

list 迭代器的使用

C++——list的简介及使用
注意:

  1. begin与end为正向迭代器,对迭代器执行++操作,迭代器向后移动
  2. rbegin(end)与rend(begin)为反向迭代器,对迭代器执行++操作,迭代器向前移动
int main()
{
	string s("hello");
	list<char> lt(s.begin(), s.end()); 
	//正向迭代器遍历容器
	list<char>::iterator it = lt.begin();
	while (it != lt.end())
	{
		cout << *it << " ";
		it++;
	}
	cout << endl;

	//反向迭代器遍历容器
	list<char>::reverse_iterator rit = lt.rbegin();
	while (rit != lt.rend())
	{
		cout << *rit << " ";
		rit++;
	}
	cout << endl;
	return 0;
}

C++——list的简介及使用

list 获取数据

C++——list的简介及使用

int main()
{
	list<int> lt;
	lt.push_back(1);
	lt.push_back(2);
	lt.push_back(3);
	lt.push_back(4);
	cout << lt.front() << endl;
	cout << lt.back() << endl;
	return 0;
}

C++——list的简介及使用

list 容量大小

C++——list的简介及使用

int main()
{
	list<int> lt;
	lt.push_back(1);
	lt.push_back(2);
	cout << lt.size() << endl;
	cout << lt.empty() << endl;
}

C++——list的简介及使用

list 相关操作函数

swap

swap用于交换两个容器的内容。

int main()
{
	list<int> lt1(3, 2);
	list<int> lt2(2, 3);
	lt1.swap(lt2); //交换两个容器的内容
	return 0;
}

交换前:
C++——list的简介及使用
交换后:
C++——list的简介及使用

clear

clear用于清空容器,清空后容器的size为0。

int main()
{
	list<int> lt(3, 2);
	lt.clear();
	return 0;
}

清理前:

C++——list的简介及使用

清理后:

C++——list的简介及使用

sort

sort可以将容器当中的数据排序(升序)。

int main()
{
	list<int> lt;
	lt.push_back(2);
	lt.push_back(1);
	lt.push_back(4);
	lt.push_back(3);
	cout << "排序前:";
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl;

	lt.sort();
	cout << "排序后:";
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl;
}

C++——list的简介及使用

resize

resize操作方式有两种

  1. 当所给值大于当前的size时,将size扩大到该值,扩大的数据为第二个所给值,若未给出,则默认为容器所存储类型的默认构造函数所构造出来的值。
  2. 当所给值小于当前的size时,将size缩小到该值。
int main()
{
	list<int> lt(3, 3);
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl; 
	lt.resize(5, 4); //将size扩大为5,扩大的值为4
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl; 
	lt.resize(2); //将size缩小为2
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl; 
	return 0;
}

C++——list的简介及使用

remove

remove可以移除指定元素。

int main()
{
	list<int> lt;
	lt.push_back(1);
	lt.push_back(2);
	lt.push_back(2);
	lt.push_back(3);
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl; 
	lt.remove(2); // 删除容器当中值为2的元素
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl; 
	return 0;
}

C++——list的简介及使用

unique

unique的作用是去除连续重复的元素(如果要去除所有重复的元素需要先排序)

int main()
{
	list<int> lt;
	lt.push_back(1);
	lt.push_back(2);
	lt.push_back(3);
	lt.push_back(3);
	lt.push_back(2);
	lt.push_back(3);
	lt.push_back(2);
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl;
	lt.unique();// 去除连续重复的元素
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl;
	lt.sort();// 排序
	lt.unique();
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl;
	return 0;
}

C++——list的简介及使用

reverse

reverse可以将容器当中元素的进行逆置。

int main()
{
	list<int> lt;
	lt.push_back(1);
	lt.push_back(2);
	lt.push_back(3);
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl;
	lt.reverse();// 逆置
	for (auto e : lt)
	{
		cout << e << " ";
	}
	cout << endl;
	return 0;
}

C++——list的简介及使用文章来源地址https://www.toymoban.com/news/detail-404493.html

到了这里,关于C++——list的简介及使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何在 Ubuntu 16.04 上配置 NTP 以在 NTP Pool 项目中使用

    介绍 准确的时间记录对于几乎任何服务或软件都至关重要。电子邮件、日志记录器、事件系统和调度程序、用户认证机制以及在分布式平台上运行的服务都需要准确的时间戳来按时间顺序记录事件。这些服务使用网络时间协议(Network Time Protocol,NTP)将系统时钟与可信的外部

    2024年04月25日
    浏览(26)
  • 需求文档中的“项目前景与范围”

    ​在进行产品需求分析时,业务需求、高层解决方案和系统特性等都应该被记录下来。定义为项目的前景与范围文档。 l前景:描述了产品的作用和最终的功能,它将所有的涉众都统一到一个方向上。 l范围:指出了当前项目是要解决产品长远规划的那一部分,它为项目规定了

    2023年04月12日
    浏览(25)
  • 【C++】list的使用

    list的底层结构是双向循环链表,在任意位置插入和删除效率很高,但是不支持任意位置的随机访问。 下面来介绍一些常用的list接口: 1.1 无参构造 list() 1.2 构造的list中包含n个值为val的元素 list (size_type n, const value_type val = value_type()) 1.3 用[first, last)区间中的元素构造list 只要

    2024年01月24日
    浏览(22)
  • 【C++】-list的具体使用

    💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C++ 动态规划算法🎄 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧! 今天,博主来给大家介绍STL中的另一个容器——list的具体

    2024年02月16日
    浏览(21)
  • [C++随笔录] list使用

    list 的底层结构就是 带头双向循环链表 运行结果: 看来list并没有 重载 + 运算符 但是 重载了++ 运行结果: 如果, 我们想要在 第五个位置进行插入该怎么办? 运行结果: list 迭代器遍历 时,while循环的判断条件只能是 != ,不能是 运行结果: 运行结果: 运行结果: 但是我们需要注意

    2024年02月07日
    浏览(25)
  • C++:list使用以及模拟实现

    list是一个类模板,加类型实例化才是具体的类 。 list是可以 在任意位置进行插入和删除 的序列式容器。 list的 底层是双向循环链表结构 ,链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。 与其他序列式容器相比, list最大的

    2024年02月11日
    浏览(27)
  • [C++]list的介绍及使用

    目录 C++:list的介绍及使用                         list的介绍                         list的使用                                 list的定义方式                                 list的插入和删除                

    2024年02月06日
    浏览(28)
  • 【C++】list的介绍及使用 | 模拟实现list(万字详解)

    目录 一、list的介绍及使用 什么是list? list的基本操作 增删查改 获取list元素 不常见操作的使用说明 ​编辑 接合splice ​编辑 移除remove 去重unique 二、模拟实现list 大框架 构造函数 尾插push_back 迭代器__list_iterator list的迭代器要如何跑起来 iterator的构造函数 begin()与end() opera

    2024年02月06日
    浏览(36)
  • 【C++】STL——list介绍及使用

    🚀 作者简介:一名在后端领域学习,并渴望能够学有所成的追梦人。 🚁 个人主页:不 良 🔥 系列专栏:🛸C++  🛹Linux 📕 学习格言:博观而约取,厚积而薄发 🌹 欢迎进来的小伙伴,如果小伙伴们在学习的过程中,发现有需要纠正的地方,烦请指正,希望能够与诸君一同

    2024年02月12日
    浏览(69)
  • 【C++初阶】list的常见使用操作

    👦个人主页:@Weraphael ✍🏻作者简介:目前学习C++和算法 ✈️专栏:C++航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞👍🏻 收藏 📂 加关注✨ 功能:将数据进行链式存储。 链表( list )是一种物理存储单元上 非连续的存储结构 ,

    2024年02月11日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包