常用数据结构一览

数据结构用途
vector动态数组
set无序非重复集合
map键值对元素集合
stack先入后出的线性表
queue先入先出的线性表

持续完善与更新中…

vector、set、map等都是STL(Standard Template Library)中的容器类,它们位于std命名空间,这些容器均可以使用模版中的泛型来指定其元素的数据类型。使用容器之前需要先导入,如下所示:

#include <vector>
#include <set>
#include <map>

using namespace std;

vector

  1. 声明与初始化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};
  1. 使用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

  1. 声明与初始化set

set的声明与初始化方式与vector基本一致,如下所示:

set<int> int_set;
set<string> string_set; 
set<int> int_set = {1, 2, 3};
  1. 使用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

  1. 声明与初始化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}};
  1. 使用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