标签:display imap 基于 cout ast 而且 简介 unique 分享
容器,就是存放数据的地方。
C++的STL(模版库)有两种容器:顺序容器和关联容器。简单来说,顺序容器就是将单一类型元素聚集起来成为容器,然后根据位置来存储和访问这些元素。而关联容器则是通过键(key)存储和读取元素。
标准容器类 | 说明 |
顺序性容器 | |
vector | 从后面快速的插入与删除,直接访问任何元素 |
deque | 从前面或后面快速的插入与删除,直接访问任何元素 |
list | 双链表,从任何地方快速插入与删除 |
关联容器 | |
set | 快速查找,不允许重复值 |
multiset | 快速查找,允许重复值 |
map | 一对多映射,基于关键字快速查找,不允许重复值 |
multimap | 一对多映射,基于关键字快速查找,允许重复值 |
容器适配器 | |
stack | 后进先出 |
queue | 先进先出 |
priority_queue | 最高优先级元素总是第一个出列 |
所有标准库共有函数
默认构造函数 | 提供容器默认初始化的构造函数。 |
复制构造函数 | 将容器初始化为现有同类容器副本的构造函数 |
析构函数 | 不再需要容器时进行内存整理的析构函数 |
empty | 容器中没有元素时返回true,否则返回false |
max_size | 返回容器中最大元素个数 |
size | 返回容器中当前元素个数 |
operator= | 将一个容器赋给另一个容器 |
operator< | 如果第一个容器小于第二个容器,返回true,否则返回false, |
operator<= | 如果第一个容器小于或等于第二个容器,返回true,否则返回false |
operator> | 如果第一个容器大于第二个容器,返回true,否则返回false |
operator>= | 如果第一个容器大于或等于第二个容器,返回true,否则返回false |
operator== | 如果第一个容器等于第二个容器,返回true,否则返回false |
operator!= | 如果第一个容器不等于第二个容器,返回true,否则返回false |
swap | 交换两个容器的元素 |
其中operator>,operator>=,operator<,operator<=,operator==,operator!=均不适用于priority_queue
顺序容器和关联容器共有函数
begin | 该函数两个版本返回iterator或const_iterator,引用容器第一个元素 |
end | 该函数两个版本返回iterator或const_iterator,引用容器最后一个元素后面一位 |
rbegin | 该函数两个版本返回reverse_iterator或const_reverse_iterator,引用容器最后一个元素 |
rend | 该函数两个版本返回reverse_iterator或const_reverse_iterator,引用容器第一个元素前面一位 |
erase | 从容器中清除一个或几个元素 |
clear | 清除容器中所有元素 |
①ector
最常用的容器,最初设计是为了替代C语言中的数组,可以自动扩容(初学时候我还一直吐槽为什么不支持VLA……),支持随机存储,在尾端添加元素为O(1),中间为O(n)。但是问题也很大,本身存放数据方式就是数组,在size不够时候需要把数据复制到更大的地方。
具体操作方法wiki有具体写:https://zh.wikipedia.org/wiki/Vector_(STL)
②List
列表,实现方法是单链表,在任意部位插入删除的时间复杂度都为O(n),尾部O(1),但是不支持随机访问,而且因为每个元素还需要存储后指针,所以内存开销比vector大了不少。
详阅:https://zh.wikibooks.org/wiki/C%2B%2B/STL/forward_list
③deque
列表和数组的结合,支持随机访问,删除插入都为O(n),两端为O(1)(push pop),但是存储了前后指针,内存开销更大了。
详阅:https://zh.wikibooks.org/wiki/C%2B%2B/STL/Deque
④ map、set、multimap、multiset
通过键值存储,可以按照键值排序,查找复杂度为O(logn)
map and multimap are associative containers that manage key/value pairs as elements as seen above. The elements of each container will sort automatically using the actual key for sorting criterion. The difference between the two is that maps do not allow duplicates, whereas, multimaps does.
- map - unique keys
- multimap - same key can be used many times
- set - unique key is the value
- multiset - key is the value, same key can be used many times
map和multimap代码实例:
/* Map example - character distribution */ #include <iostream> #include <map> #include <string> #include <cctype> using namespace std; int main() { /* Character counts are stored in a map, so that * character is the key. * Count of char a is chars[‘a‘]. */ map<char, long> chars; cout << "chardist - Count character distributions" << endl; cout << "Type some text. Press ctrl-D to quit." << endl; char c; while (cin.get(c)) { // Upper A and lower a are considered the same c=tolower(static_cast<unsigned char>(c)); chars[c]=chars[c]+1; // Could be written as ++chars[c]; } cout << "Character distribution: " << endl; string alphabet("abcdefghijklmnopqrstuvwxyz"); for (string::iterator letter_index=alphabet.begin(); letter_index != alphabet.end(); letter_index++) { if (chars[*letter_index] != 0) { cout << char(toupper(*letter_index)) << ":" << chars[*letter_index] << "\t" << endl; } } return 0; }
参考
STL十大容器, just_kong, http://www.aiuxian.com/article/p-2119514.html
C++ Programming/STL, https://en.wikibooks.org/wiki/C%2B%2B_Programming/STL#Containers
标签:display imap 基于 cout ast 而且 简介 unique 分享
原文地址:http://www.cnblogs.com/himself65/p/7623271.html