【C++STL标准库】序列容器之deuqe与、orwa_list与list

这篇具有很好参考价值的文章主要介绍了【C++STL标准库】序列容器之deuqe与、orwa_list与list。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基本概念这里就不再浪费时间去解释,这里给出deuqe与、orwa_list、list的基本使用方法:

  • deque队列:
#include <iostream>
#include <deque>

template <typename T>
void print(T Begin, T End);

int main() {
	std::deque<int> Obj1(6);
	//迭代器的类型:随机访问迭代器
	std::cout << typeid(std::deque<int>::iterator::iterator_category).name() << std::endl;
	//deque(队列)的赋值操作,可以使用[]的方式来进行赋值
	for (int i = 0; i < Obj1.size(); i++) {
		Obj1[i] = i+1;
	}
	print(Obj1.begin(), Obj1.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//at方法,找到队列中,该下标的值并返回,可以用于修改值,返回值类型:T
	Obj1.at(0) = 666;
	std::cout << typeid(Obj1.at(7)).name() << std::endl;
	print(Obj1.begin(), Obj1.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//size方法,返回当前队列的实际大小
	int a = Obj1.size();
	std::cout << a << std::endl;
	std::cout << std::endl;
	std::cout << "----------------------------------------------------" << std::endl;
	//max_size方法,返回队列的最大尺寸
	int b = Obj1.max_size();
	std::cout << b << std::endl;
	std::cout << std::endl;
	std::cout << "----------------------------------------------------" << std::endl;
	//front方法和back方法:分别返回队列中,第一个元素和最后一个元素,返回值类型:T
	int c = Obj1.front();
	int d = Obj1.back();
	std::cout << typeid(Obj1.front()).name() << std::endl;
	std::cout << typeid(Obj1.back()).name() << std::endl;
	std::cout << c << "\t" << d << std::endl;
	std::cout << "----------------------------------------------------" << std::endl;
	//push_front方法,向队列首添加元素,返回值类型:void
	Obj1.push_front(111);
	std::cout << typeid(Obj1.push_front(111)).name() << std::endl;
	print(Obj1.begin(), Obj1.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//push_back方法,向队列尾部添加元素,返回值类型:void
	Obj1.push_back(12345679);
	std::cout << typeid(Obj1.push_back(12345679)).name() << std::endl;
	print(Obj1.begin(), Obj1.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//pop_front方法,弹出队列首部的元素,返回值类型:void
	Obj1.pop_front();
	std::cout << typeid(Obj1.pop_front).name() << std::endl;
	print(Obj1.begin(), Obj1.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//pop_back方法,弹出队列尾部的元素,返回值类型:void
	Obj1.pop_back();
	std::cout << typeid(Obj1.pop_back).name() << std::endl;
	print(Obj1.begin(), Obj1.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//rbegin方法:反向迭代器
	print(Obj1.rbegin(), Obj1.rend());
	std::cout << "----------------------------------------------------" << std::endl;
	//insert方法,向列表的指定位置插入元素,第一个参数:迭代器,第二个参数:想要插入的值 //第二个参数也可以是个数,代表想要插入几个,第三个参数就是想要插入的值
	Obj1.insert(Obj1.begin()+4,3, 666666666);
	std::cout << typeid(Obj1.insert(Obj1.begin() + 4, 666)).name() << std::endl;
	print(Obj1.begin(), Obj1.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//erase方法,删除指定位置的元素,参数是迭代器,也可以范围删除元素,第一个参数是起始位置迭代器,第二个参数是结束位置迭代器
	Obj1.erase(Obj1.begin(),Obj1.end());
	std::cout << typeid(Obj1.erase(Obj1.begin())).name() << std::endl;
	print(Obj1.begin(), Obj1.end());
	std::cout << "----------------------------------------------------" << std::endl;
	return 0;
}

template<typename T>
void print(T Begin, T End)
{
	T i = Begin;
	for (; i != End; i++) {
		std::cout << *i << "\t";
	}
	std::cout << std::endl;
}

forward_list单向列表:

#include <iostream>
#include <forward_list>

template <typename T>
void print(T Begin, T End);

int main() {
	std::forward_list<int> arr(5, 000);
	//迭代器类型:前向迭代器,可读可写=, == ,!= ,++i ,i++
	std::cout << typeid(std::forward_list<int>::iterator::iterator_category).name() << std::endl;
	print(arr.begin(), arr.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//psuh_frint方法,前插法,向单向列表前插入元素,返回值类型:void
	for (int i = 0; i < 4; i++) {
		arr.push_front(i);
	}
	std::cout << typeid(arr.push_front(1)).name() << std::endl;
	print(arr.begin(), arr.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//pop_front方法,弹出列表第一个元素,返回值类型:void
	arr.pop_front();
	std::cout << typeid(arr.pop_front()).name() << std::endl;
	print(arr.begin(), arr.end());
	std::cout << "----------------------------------------------------" << std::endl;
	return 0;
}

template<typename T>
void print(T Begin, T End)
{
	T i;
	for (i = Begin; i != End; i++) {
		std::cout << *i << "\t";
	}
	std::cout << std::endl;
}

list双向链表:

#include <iostream>
#include <list>

template <typename T>
void print(T Begin, T End);

int main() {
	std::list<int> arr(5, 666);
	//迭代器类型:struct std::bidirectional_iterator_tag(双向迭代器),可读可写=, == ,!= ,++i ,i++。--i,i--
	std::cout << typeid(std::list<int>::iterator::iterator_category).name() << std::endl;
	print(arr.begin(), arr.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//push_front,push_back方法:向列表同步和尾部插入元素,返回值类型:void
	arr.push_front(1);
	arr.push_back(5);
	std::cout << typeid(arr.push_front(1)).name() << "\t" << typeid(arr.push_back(5)).name() << std::endl;
	print(arr.begin(), arr.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//insert方法,向列表指定位置插入元素,第一个参数为迭代器,指向要插入的位置,第二个参数为想要插入的值/第二个参数也可以为要插入元素的个数,第三个参数为要想插入的值
	arr.insert(arr.begin(), 2);
	arr.insert(arr.begin(), 3, 666);
	std::cout << typeid(arr.insert(arr.begin(), 2)).name() << std::endl;
	print(arr.begin(), arr.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//pop_front,pop_back方法,弹出列表首部和尾部的值,返回值类型:void
	arr.pop_front();
	arr.pop_back();
	std::cout << typeid(arr.pop_front).name() << "\t" << typeid(arr.pop_back).name() << std::endl;
	print(arr.begin(), arr.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//erese方法:删除指定位置的值,参数为指定位置迭代器,也可以删除范围,第一个参数为其实迭代器,第二个参数为结束迭代器
	arr.erase(arr.begin());
	arr.erase(arr.begin(), arr.end());
	print(arr.begin(), arr.end());
	std::cout << "----------------------------------------------------" << std::endl;
	//reverse方法:将列表中的元素倒置
	arr.reverse();
	print(arr.begin(), arr.end());
	std::cout << "----------------------------------------------------" << std::endl;
	return 0;
}

template<typename T>
void print(T Begin, T End)
{
	T i;
	for (i = Begin; i != End; i++) {
		std::cout << *i << "\t";
	}
	std::cout << std::endl;
}

如果发现文章中有错误,还请大家指出来,我会非常虚心地学习,我们一起进步!!!文章来源地址https://www.toymoban.com/news/detail-607665.html

到了这里,关于【C++STL标准库】序列容器之deuqe与、orwa_list与list的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • STL——stack容器、queue容器、list容器

    就是栈 栈不允许有遍历行为 是先进后出的数据结构 是先进先出的数据结构 **队列容器允许从一端新增元素,从另一端移除元素 队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为 队列中进数据称为—入队push 队列中出数据称为—出队pop ** 在STL中这个链表

    2024年02月09日
    浏览(27)
  • 【C++STL标准库】关联容器

    关联容器(双向迭代器) 这里给出set的基本使用方法: 基于平衡二叉树(红黑树) 多重集合允许值重复,其他和set一样 这里给出multiset的基本使用方法,实际上和set没太大的区别: 无序集合 基于哈希表 区别:不会对元素进行排序,其他基本没区别 unordered_multiset:多重无序

    2024年02月15日
    浏览(23)
  • C++标准库STL容器详解

    容器都是类模板,它们实例化后就成为容器类。用容器类定义的对象称为容器对象。对象或变量插入容器时,实际插入的是对象或变量的一个复制品。 顺序容器 1、元素在容器中的位置同元素的值无关,即容器不是排序的。 2、顺序容器包括:vector、deque、list。 关联容器 1、

    2024年02月10日
    浏览(22)
  • 15 标准模板库STL之容器1

    基础知识         1、vector和数组有点类似,但它比数组更好用。一般来说,数组的长度是不能动态拓展的,因此就需要考虑长度到底多大合适。长度不能过大,否则浪费内存;也不能过小,否则内存不够。vector正好弥补了这个缺陷,相当于一个可以自动改变数组长度的动

    2023年04月12日
    浏览(30)
  • 【C++学习】STL容器——list

    目录 一、list的介绍及使用 1.1 list的介绍  1.2 list的使用 1.2.1 list的构造  1.2.2  list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list 迭代器失效 二、list的模拟实现 2.1 模拟实现list 三、list和vector的对比 一、list的介绍及使用 1.1 list的介绍 list的文档介绍

    2024年02月14日
    浏览(30)
  • C++轮子 · STL 序列容器

    STL中大家最耳熟能详的可能就是容器,容器大致可以分为两类,序列型容器(SequenceContainer)和关联型容器(AssociativeContainer)这篇文章中将会重点介绍STL中的各种序列型容器和相关的容器适配器。主要内容包括 std::vector std::array std::deque std::queue std::stack std::priority_queue std::l

    2024年01月17日
    浏览(30)
  • 22 标准模板库STL之容器适配器

    概述         提到适配器,我们的第一印象是想到设计模式中的适配器模式:将一个类的接口转化为另一个类的接口,使原本不兼容而不能合作的两个类,可以一起工作。STL中的容器适配器与此类似,是一个封装了序列容器的类模板,它在一般序列容器的基础上提供了一

    2024年02月05日
    浏览(30)
  • C++ ——STL容器【list】模拟实现

    代码仓库: list模拟实现 list源码 数据结构——双向链表 源码的list是双向带头循环链表,所以我们定义两个节点,一个指向下一个,一个指向前一个 list类包含一个 _head 头节点,然后为了方便查出当前有多少个节点,还能多定义一个 _size 源码的迭代器设置了三个模板参数:

    2024年02月15日
    浏览(32)
  • C++高级编程——STL:list容器、set容器和map容器

    本专栏记录C++学习过程包括C++基础以及数据结构和算法,其中第一部分计划时间一个月,主要跟着黑马视频教程,学习路线如下, 不定时更新,欢迎关注 。 当前章节处于: ---------第1阶段-C++基础入门 ---------第2阶段实战-通讯录管理系统, ---------第3阶段-C++核心编程, -----

    2024年01月25日
    浏览(37)
  • STL标准模板库 vector容器与迭代器入门

    vector 就是一个连续的数据 C++11 std::vector a ={1,4,2,6,7}; 可以使用花括号来定义 容器的功能就是存储数据 迭代器的功能就是指向数据,并且可以实现前后移动(指针)算法和容器的接口的存在 vector功能是长度可变的数组, 身在栈上 里面的数据存储在堆上 因为栈不可动态扩容

    2023年04月23日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包