Vector:
- 特点:变长数组,一般在元素个数不确定的情况下使用
- 添加头文件 #include <vector>, 以及 using namespace std;
- 定义:vector<typename> name; 相当于一位数组 name[SIZE], 只不过其长度可以根据需要进行变化,比较节省空间,“变长数组”
- vector 数组定义:vector<typrname> Arrayname[arraysize], 即 Arrayname[] 中的每一个元素都是一个 vector, Arrayname[0] ~ Arrayname[arraysize - 1] 中每一个都是一个 vector容器,相当于一个二维数组, 例如vector<int> vi[100];
- 访问:①通过下标访问 vi[0], vi[1]... ② 通过迭代器访问 vector::iterator it = it.begin() ,可以使用 *it 访问元素,vi[i] 与 *(vi.begin()+i)
- push_back(), 在 vector 之后添加一个元素 x
- pop_back(): 删除vector尾部的元素
- size() , 获取 vector 中元素个数
- clear(), 清除vector中的元素
- insert(it, x), 向vector的任意迭代器it处插入一个元素x
- erase(it), 删除迭代器处元素, erase(first, end) 删除[first, end) 内的所有元素
Set:
- 特点:自动去重,升序排序
- 添加 #include <set> 以及 using namespace std;
- 定义:set<typename> name;
- set 数组的定义和 vector 相同: set<typename> Arrayname[arraysize], 比如 set<int> a[100];
- set 中元素的访问只能通过迭代器来访问 set<typename>::iterator it; 例如在 for 循环中的使用 for(set<int>::iterator it = a[x].begin(); it != a[x].end(); it++)
- insert(x) 将 x 插入容器 set 中,并且自动递增排序和去重
- fine(value) 返回 set 中对应值为 value 的迭代器,判断是否找到 st[y].find(*it) != st[y].end()
- erase(): st.erase(it), 删除迭代器 it 所在的元素; st.erase(value); 删除值为value;st.erase(first, last) 删除一个区间
- size() 获取 set 中元素个数
- clear() 清空
string:
- 添加 #include <string> 以及 using namespace std;
- 定义:string str = "abcd";
- 访问:下标;迭代器(下标可以完成访问,但是insert、erase函数要求以迭代器为参数)string::iterator it = str.begin()
- += 拼接字符串;==、 <= 等关系运算符按照字典序
- str.length() / size() 长度
- str1.insert(pos, str2) 在 pos 号位置处插入字符串str2;insert(it, it2, it3) 将串[it2, it3) 插在 it 的位置上
- erase(it) 删除单个元素;erase(first, last); erase(pos, length) 删除以pos为起始的长度为length的串
- clear() 清空
- substr(pos, len) 返回从 pos 号位开始,长度为 len 的子串
- str.find(str2) 当str2是str的子串时,返回str第一次出现的位置;如果不是子串,返回 string::npos; str.find(pos, str2) 从pos号位开始匹配str2
- str.replace(pos, len, len2) 把str从pos号位开始,长度为len的子串替换为str2; str.replace(it1, it2, str2) 把str的迭代器[it1, it2) 范围的子串替换为str2
- 读入和输出整个字符串,只能用 cin 和 cout
map:
- 特点:可以将任何类型(包括STL容器)映射到任何基本类型(包括STL容器),同时会以键从小到大自动排序
- 用途:建立字符(字符串)与整数之间的映射;大整数或其他数据类型是否存在
- 添加 #include <map>, using namespce std;
- 定义:map<typename1, typename2> mp; 其中 typename1 为键(key),typename2 映射后类型 值(value);如果是字符串映射时,必须使用string,不可以使用char数组(因为char作为数组是不可能作为键值的);map<char, int> mp;
- 访问:通过下标直接访问 mp['c'] = 20; 迭代器访问: it->first 访问键, it->second访问值
- find(key) 返回键为key的迭代器;找不到 mp.find(key) == mp.end()
- erase(it) 删除;erase(key) 删除键为key; erase(first, end)
- size() 大小
- clear() 清空
queue:
- #include <queue>; usina namespce std;
- queue<int> q;
- 访问:只能通过front() 和 back() 来访问队首、队尾元素 q.front();
- q.push(1); 入队
- q.pop(); 队首元素出队
- q.empty() == true 队空
- q.size() 大小
priority_queue:
- 特点:队首元素一定是队列中优先级最高的,本质是堆
- #include <queue>; usina namespce std;
- priority_queue<int> name;
- 访问:只能通过 top() 函数来访问队首元素,没有front() 和 back()
- q.push(1); 入队
- q.pop(); 出队
- q.empty() == true 队空
- q.size() 大小
- 优先级设置:默认priority_queue<int> name; 数字最大、字典序最大的在队首;定义priority_queue<int, vector<int>, greater<int> >q;可以最小的放在队首
stack:
- #include <stack>; using namespce std;
- 只能通过top()访问栈顶元素
- push() pop() empty() size()