STL中deque,queue,stack,list的学习

简介: 版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/45124029 (一):要点1:容器deque的使用方法 2:容器queue,stack的使用方法 3:容器list的使用方法(二)deque1:deque简介deque是“double-ended queue”的缩写,deque是双端的,vector是单端的。
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/45124029

(一):要点

1:容器deque的使用方法
2:容器queue,stack的使用方法
3:容器list的使用方法

(二)deque

1:deque简介

deque是“double-ended queue”的缩写,deque是双端的,vector是单端的。
deque在接口上和vector相似,在许多操作的地方可以直接替换
deque可以随机存取元素,支持索引值直接存取,使用[]或者是at()方法
deque的头部和尾部添加和移除元素都非常快速,但是在中部插入元素或移除元素
比较费时。

2:deque的构造
//和vector基本相同

deque<int> de;

3:deque头部和尾部添加或者是移除元素
deque.push_back(ele) ; // 尾部添加元素
deque.pop_back(); //尾部删除元素

deque.push_front(ele) ; //头部添加元素
deque.pop_front(); //头部移除元素

4:deque的数据存取
deque.at[index]; //返回索引index所指的数据,如果越界,会跑出out_of_range
deque[index];//返回index所指的数据,越界的话,不会抛出异常

deque.front(); //返回第一个元素
deque.back(); //返回最后一个元素

5:deque的迭代器
deque.begin(); //返回容器中第一个元素的迭代器
deque.end(); //返回容器中最后一个元素之后的迭代器

deque.rbegin(); //返回容器中倒数第一个元素的迭代器
deque.rend(); //返回容器中倒数最后一个元素之后的迭代器

6:deque带参数的构造
deque(beg,end); //构造函数将区间[beg,end)区间的元素拷贝给本身,
//注意是左闭右开

deque(n,ele); //构造函数将n个ele拷贝给本身

deque(const deque &deq); //拷贝构造函数

7:deque的赋值
deque.assign(beg,end);
deque.assign(n,ele);

deque& operator=(const deque &deq);

deque.swap(deq); //将vec与本身的元素互换

8:deque的大小
包括size(),empty(),resize()

9:deque的插入
与vector是一样的

10:deque的删除
包括clear(),erase()等方法,与vector是一样的。

(三)、queue 队列
1:简介
queue 是队列容器,是一种“先进先出”的容器
queue是简单的装饰deque容器而成为另外一种容器。

2:构造函数与vector和deque是一样的

3:queue的push和pop操作
由于queue是单向的,一个口插入,一个口输出
queue.push(ele); //在后面插入一个元素
queue.pop(); //在前面弹出一个元素
例子:

queue<int> que;
que.push(10);
que.push(20);
que.push(30);

则插入之后,效果为:
这里写图片描述

则执行
que.pop();
que.pop();
que.pop();
输出的效果为10,20,30

4:queue的拷贝,构造和复制
基本上和vector和qedue是一样的

5:queue的数据存取

deque.back(); //获取最后一个元素
deque.front(); //获取第一个元素

6: queue的大小
queue.size(); //元素个数
queue.empty(); // queue是否为空

(四):stack
1:简介
stack是先进后出

2:stack的拷贝,构造和复制都是一样的

3:函数基本上和queue是一样的
4:举例

stack<int> s;
s.push(10);
s.push(20);
s.push(30);

这里写图片描述

则执行:
s.pop();
s.pop();
s.pop();
输出的结果为:
30,20,10
(五):list容器

1:简介

list是一个双向链表容器,可高效的进行插入删除元素
list不可以随机存取元素,所以不支持at(pos)函数和[]操作

2: 事前准备

#include <list>
using namespace std;

3:list头尾的添加移除操作

list.push_back(ele) ; // 尾部添加元素
list.pop_back(); //尾部删除元素

list.push_front(ele) ; //头部添加元素
list.pop_front(); //头部移除元素

4:list与迭代器
list.begin(); //返回容器中第一个元素的迭代器
list.end(); //返回容器中最后一个元素之后的迭代器

list.rbegin(); //返回容器中倒数第一个元素的迭代器
list.rend(); //返回容器中倒数最后一个元素之后的迭代器

5:赋值,大小,插入,删除等等都是一样的

不过在删除操作中多了一个remove元素:
list.remove(ele);
list.erase(index);

这两个方法的区别就是remove是删除所有与ele匹配的元素,
而erase()函数是将指定位置的元素移除掉

6:list的反序

list.reverse(); //反序

目录
相关文章
|
7天前
|
编译器 C语言 C++
【c++丨STL】list模拟实现(附源码)
本文介绍了如何模拟实现C++中的`list`容器。`list`底层采用双向带头循环链表结构,相较于`vector`和`string`更为复杂。文章首先回顾了`list`的基本结构和常用接口,然后详细讲解了节点、迭代器及容器的实现过程。 最终,通过这些步骤,我们成功模拟实现了`list`容器的功能。文章最后提供了完整的代码实现,并简要总结了实现过程中的关键点。 如果你对双向链表或`list`的底层实现感兴趣,建议先掌握相关基础知识后再阅读本文,以便更好地理解内容。
15 1
|
19天前
|
算法 C语言 C++
【c++丨STL】list的使用
本文介绍了STL容器`list`的使用方法及其主要功能。`list`是一种双向链表结构,适用于频繁的插入和删除操作。文章详细讲解了`list`的构造函数、析构函数、赋值重载、迭代器、容量接口、元素访问接口、增删查改操作以及一些特有的操作接口如`splice`、`remove_if`、`unique`、`merge`、`sort`和`reverse`。通过示例代码,读者可以更好地理解如何使用这些接口。最后,作者总结了`list`的特点和适用场景,并预告了后续关于`list`模拟实现的文章。
34 7
|
3月前
|
存储 搜索推荐 C++
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
69 2
|
3月前
|
存储 C++ 容器
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器1
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
76 5
|
3月前
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
85 2
|
3月前
|
C++
【C++】C++ STL 探索:List使用与背后底层逻辑(三)
【C++】C++ STL 探索:List使用与背后底层逻辑
|
3月前
|
C++
【C++】C++ STL 探索:List使用与背后底层逻辑(二)
【C++】C++ STL 探索:List使用与背后底层逻辑
|
7月前
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
1068 1
|
6月前
|
Java API Apache
怎么在在 Java 中对List进行分区
本文介绍了如何将列表拆分为给定大小的子列表。尽管标准Java集合API未直接支持此功能,但Guava和Apache Commons Collections提供了相关API。
|
6月前
|
运维 关系型数据库 Java
PolarDB产品使用问题之使用List或Range分区表时,Java代码是否需要进行改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。