STL - C++的标准模板库
Cobb 553 0

C++ STL容器(standard template library) 六大组件: 顺序容器、容器适配器、关联容器、迭代器、函数对象、泛型算法

顺序容器

补充:array forword_list deque https://blog.csdn.net/u013074465/article/details/44617629

1、vector:

向量容器 可扩容的数组,2倍扩容 末尾增加/删除;下标访问多

增加: push_back(val) insert(iterator, val) 删除: pop_back() erase(iterator)

迭代器的失效问题? insert或者erase以后,原有的迭代器就全部失效了,需要用函数返回值更新一下迭代器

迭代器遍历容器 for (auto it=v.begin(); it!=v.end(); ++it) { cout << *it << " "; }

2、list

双向链表容器 增加和删除多 增加: push_back(val) push_front(val) insert(iterator, val) 删除: pop_back() pop_front() erase(iterator)

容器适配器

(适配器:功能没有自己实现,依赖其它容器的方法实现的) stack(栈):push pop top empty size queue(队列):push pop front back empty size priority_queue(优先级队列,默认是一个大根堆):push pop top empty size

大根堆/小根堆 =》 在一堆数据中过滤出来top k大的或者小的数据 还有:快排分割函数 partation

关联容器

有序的关联容器 =》 红黑树 =》 O(logn) : 关联:存储的是键值对 set(集合): key 对key排序 二叉排序树 map(映射表): key<->value

无序的关联容器 =》 链式哈希表 =》 O(1) unordered_set(集合):key unordered_map(映射表):key<->value

迭代器 :

unordered_map<int, string> m; m.emplace(1000, "aaa"); m.erase(1000) auto it = m.find(1000); // pair{first, second} it->first:key it->second:value

m[2000]:2000这个key如果不存在,会自动插入新的键值对

遍历容器的方式都一样,具体的容器的遍历差异被封装在了迭代器的 运算符重载函数里了。

函数对象

是拥有operor()运算符重载的函数对象 对象(参数XX) 对象.operator()(参数XX)

泛型算法:

find sort find_if for_each remove

评论区

索引目录