更多关于C++的总结汇总博客可以参考这个:C++刷题基础知识(栈、队列、hash、STL、基础函数等)---持续更新-CSDN博客
一、基本的数据结构
1.1 栈stack
1.1.1 stack的基本特性
C++ stack(堆栈)是一种基于后进先出(LIFO)原则操作的容器。它具有以下基本特性:
- 后进先出(LIFO):只有位于堆栈顶部的元素可以被访问和删除,新添加的元素也会被放在堆栈的顶部。
- 动态性:stack的大小是动态的,可以根据需要自动增长或缩小。
- 随机访问:stack支持随机访问,可以通过索引直接访问任意位置的元素。但是注意,由于stack是后进先出(LIFO)的,所以最后一个添加到stack中的元素是第一个被访问的。
- 容器的通用性:stack可以容纳任何类型的元素,包括基本类型和自定义类型。
1.1.2 stack的代码使用例程
cpp
#include <stack> //头文件
std::stack<int> myStack; // 栈的声明创建
using namespace std; //忽略std::
stack<int> myStack;
myStack.push(10); //通过push添加元素
myStack.push(20);
int top = myStack.top(); // 获取栈顶元素
myStack.pop(); // 删除栈顶元素
bool isEmpty = myStack.empty(); // 判断栈是否为空
int size = myStack.size(); // 获取栈的大小
//一些高级使用方法,自定义栈(固定类型和固定长度)
std::stack<int, std::vector<int>> myStack;
1.1.3 stack的用法总结(表格)
函数名 | 功能描述 |
---|---|
push() |
向栈顶添加一个元素 |
pop() |
删除栈顶元素 |
top() |
返回栈顶元素的值 |
empty() |
判断栈是否为空,如果为空则返回true,否则返回false |
size() |
返回栈中元素的个数 |
clear() | 清空栈中的所有元素。 |
1.2 单端队列queue
1.2.1 queue的基本特性
C++ queue是一种基于先进先出(FIFO)原则操作的容器。它具有以下基本特性:
- 先进先出(FIFO):队列的头部是第一个被添加的元素,也是第一个可以被删除的元素。新添加的元素总是被放在队列的尾部。
- 动态性:queue的大小是动态的,可以根据需要自动增长或缩小。
- 随机访问:queue不支持随机访问,不能通过索引直接访问任意位置的元素。只能从队头开始依次访问。
- 容器的通用性:queue可以容纳任何类型的元素,包括基本类型和自定义类型。
1.2.2 queue的代码使用例程
cpp
#include <queue> //头文件声明
using namespace std;
queue<int> q; // 创建一个整数类型的队列
q.push(10); // 在队列尾部添加元素
bool em=q.empty(); //判断队列是否为空
int ans=q.front(); //获取队列的头部第一个元素
int ans=q.back(); //获取队列的尾部第一个元素
q.pop(); //删除队列头部第一个元素
int qsize=q.size(); //获取队列大小
1.2.3 queue的用法总结(表格)
函数名 | 功能描述 |
---|---|
push() |
在队列尾部添加一个元素 |
pop() |
删除队列的头部元素 |
front() |
返回队列的头部元素 |
back() |
返回队列的尾部元素 |
empty() |
判断队列是否为空(元素个数为0) |
size() |
返回队列中元素的个数 |
clear() | 清空栈中的所有元素。 |
1.3 双端队列deque
1.3.1 deque的基本特性
C++ deque(双端队列)是一种具有队列和栈的性质的数据结构。它支持在队列的前端和后端进行插入和删除操作。其基本特性包括:
- 双向队列:deque在队列的两端都可以进行插入和删除操作。
- 动态数组:deque底层通常使用动态数组实现,可以动态地增长和缩小。
- 顺序存储:deque中的元素是顺序存储的,相邻元素在内存中相邻存储。
- 支持随机访问:deque支持使用索引进行访问,可以随机访问队列中的元素。
- 高效的插入和删除操作:deque在队列的两端插入和删除元素的复杂度为O(1)。
1.3.2 deque的代码使用例程
cpp
#include <iostream>
#include <deque> //头文件声明
using namespace std;
deque<int> d; // 创建一个空的deque
d.push_front(1); // 在队列前端插入元素
d.push_back(3); // 在队列后端插入元素
int ans=d.size();//队列大小
d.pop_front(); //删除队列第一个元素
d.pop_back(); //删除队列最后一个元素
bool em=d.empty();//队列是否为空
1.3.3 deque的用法总结(表格)
函数名 | 功能描述 | 时间复杂度 |
---|---|---|
push_front() |
在队列前端插入一个元素 | O(1) |
push_back() |
在队列后端插入一个元素 | O(1) |
pop_front() |
删除队列前端的一个元素 | O(1) |
pop_back() |
删除队列后端的一个元素 | O(1) |
front() |
返回队列前端的元素 | O(1) |
back() |
返回队列后端的元素 | O(1) |
empty() |
判断空 |
1.4 数组容器vector
1.4.1 vector的基本特性
C++ vector是一种动态数组,它具有以下基本特性:
- 动态性:vector的大小是动态的,可以在运行时添加或删除元素。
- 随机访问:vector支持随机访问,可以通过索引直接访问任意位置的元素。
- 容器的通用性:vector可以容纳任何类型的元素,包括基本类型和自定义类型。
- 高效性:vector在内存中连续存储元素,因此访问元素的速度非常快。
1.4.2 vector的代码使用例程
cpp
#include <iostream>
#include <vector>
std::vector<int> v; // 创建一个空的vector
v.push_back(1); // 在vector末尾添加元素
int siz=v.size(); //返回vector数组大小
v.insert(v.begin(), 0); // 在vector前端插入元素
v.erase(v.begin() + 1); // 删除vector中的元素
v.clear(); // 清空vector中的元素
1.4.3 vector的用法总结(表格)
函数名 | 描述 |
---|---|
push_back() | 在vector末尾添加一个元素 |
insert() | 在vector前端或后端插入一个或多个元素 |
erase() | 删除vector中的一个或多个元素 |
clear() | 清空vector中的所有元素 |
resize() | 调整vector的大小 |
empty() | 判断vector是否为空 |
size() | 获取vector的大小 |
capacity() | 获取vector的容量 |
front() | 获取vector第一个元素的值 |
back() | 获取vector最后一个元素的值 |
operator[] | 通过索引访问vector中的元素 |
begin() | 获取vector的起始迭代器 |
end() | 获取vector的结束迭代器 |
rbegin() | 获取vector的逆向起始迭代器(从尾部开始) |
rend() | 获取vector的逆向结束迭代器(从尾部开始) |
更多关于C++的总结汇总博客可以参考这个:C++刷题基础知识(栈、队列、hash、STL、基础函数等)---持续更新-CSDN博客