简介
C++ STL(标准模板库) 提供了通用的模板类和函数,说白了,就是借助模板将常用的数据结构和算法都实现了一遍,核心包括了如下几个组件:
- 容器 Containers,管理某一类对象的集合,例如
deque
list
vector
map
等。 - 算法 Algorithms,算法作用于容器,对容器内容执行初始化、排序、搜索和转换等操作。
- 迭代器 Iterators,遍历对象集合的元素,可以是容器或者是容器的子集。
常见的,vector 的底层为数组,list 的底层为双向链表,deque 的底层为循环队列,set 的底层为红黑树,hash_set 的底层为哈希表。
map
#include <set>
#include <map>
#include <list>
#include <string>
#include <vector>
#include <iostream>
int main(void)
{
//===== String
std::string S0;
std::string S1 = "Hello World";
std::string S2("Hi");
std::string S3(5, 'H'); // "HHHHH"
std::string S4(S1); // Deep Copy
std::string S5 = S1; // Deep Copy
std::cout << S0.empty() << std::endl << S1.size() << std::endl;
for (std::string::iterator i = S1.begin(); i != S1.end(); i++)
std::cout << *i << std::endl;
for (std::string::const_iterator i = S1.begin(); i != S1.end(); i++)
std::cout << *i << std::endl;
//===== Vector
std::vector<int> V0;
std::vector<int> V1 = {1, 2, 3, 4, 5};
std::vector<int> V2(5); // {0, 0, 0, 0, 0}
std::vector<int> V3(5, 0); // {0, 0, 0, 0, 0}
std::cout << V0.empty() << std::endl << V1.size() << std::endl;
V1.push_back(6); // {1, 2, 3, 4, 5, 6}
V1.pop_back(); // {1, 2, 3, 4, 5}
V1.insert(V1.begin() + 1, 2); // {1, 2, 2, 3, 4, 5}
V1.erase(V1.begin() + 1); // {1, 2, 3, 4, 5}
V1.insert(V1.begin(), 2, 0); // {0, 0, 1, 2, 3, 4, 5}
for (std::vector<int>::reverse_iterator i = V1.rbegin(); i != V1.rend(); i++)
std::cout << *i << std::endl;
V1.clear();
//===== List
std::list<int> L0;
std::list<int> L1 = {5, 4, 3, 2, 1};
L1.sort();
//===== Set
std::set<int> SS0;
std::set<int> SS1 = {1, 2, 3, 2, 1}; // {1, 2, 3}
SS1.insert(9);
for (std::set<int>::iterator i = SS1.begin(); i != SS1.end(); i++)
std::cout << *i << std::endl;
//===== Map
std::map<std::string, int>M0;
M0["Andy"] = 10;
M0["James"] = 20;
for (std::map<std::string, int>::iterator i = M0.begin(); i != M0.end(); i++)
std::cout << i->first << " " << i->second << std::endl;
return 0;
}