常用数据结构一览
数据结构 | 用途 |
---|---|
vector | 动态数组 |
set | 无序非重复集合 |
map | 键值对元素集合 |
stack | 先入后出的线性表 |
queue | 先入先出的线性表 |
持续完善与更新中…
vector、set、map等都是STL(Standard Template Library)中的容器类,它们位于std命名空间,这些容器均可以使用模版中的泛型来指定其元素的数据类型。使用容器之前需要先导入,如下所示:
#include <vector>
#include <set>
#include <map>
using namespace std;
vector
- 声明与初始化vector
// 定义元素数据类型为int的vector
vector<int> int_vector;
// 定义元素数据类型为string的vector(在使用string之前先include)
vector<string> string_vector;
定义vector时不加任何赋值语句,其本身已经初始化为一个空的vector。
与普通数组的初始化方式一样,vector也可以使用{元素1, 元素2, ... 元素n}
的形式初始化多个元素(c++11标准语法),如下所示:
vector<int> int_vector = {1, 2, 3};
- 使用vector
// 查找(通过下标取值)
int first_element = int_vector[0];
// 遍历(普通方式)
int current_vector_element;
for (int i = 0; i < int_vector.size(); i++) {
current_vector_element = int_vector[i];
}
// 遍历(迭代器方式)
vector<int>::iterator iterator;
for (iterator = int_vector.begin(); iterator != int_vector.end(); iterator++) {
current_vector_element = *iterator;
}
// 在末尾增加元素
int_vector.push_back(4);
// 删除末尾的元素
int_vector.pop_back();
set
- 声明与初始化set
set的声明与初始化方式与vector基本一致,如下所示:
set<int> int_set;
set<string> string_set;
set<int> int_set = {1, 2, 3};
- 使用set
// 查找(auto的具体类型为set<int>::iterator)
auto element = int_set.find(2);
// 遍历(普通方式)
int current_set_element;
for (const auto &element : int_set) {
current_set_element = element;
}
// 遍历(迭代器方式)
for (auto it = int_set.begin(); it != int_set.end(); ++it) {
current_set_element = *it;
}
// 插入元素
int_set.insert(4);
// 删除元素
int_set.erase(4);
int_set.erase(int_set.find(3));
map
- 声明与初始化map
map使用两个泛型来指定map元素中键与值的数据类型。
// 定义键为string类型且值为int类型的map
map<string,int> string_int_map;
map可以使用{ {键1,值1}, {键2,值2}, ... {键n,值n} }
的形式初始化多个元素,如下所示:
map<string,int> string_int_map = {{"a",1}, {"b",2}};
- 使用map
// 遍历(迭代器方式)
string current_key;
int current_value;
map<string,int>::iterator iterator;
for (iterator = string_int_map.begin(); iterator != string_int_map.end(); iterator++) {
current_key = iterator->first;
current_value = iterator->second;
}
stack
// TODO
queue
// TODO