C++标准库学习

来源:互联网 发布:c语言字符串分割 编辑:程序博客网 时间:2024/05/21 06:18

标准库以头文件形式呈现

C++标准库的头文件不带.h;

新式C头文件不带.h,例如#include<cstdio>

旧式C头文件带.h,例如#include<stdio.h>


STL六大部件:容器(containers)/分配器(Allocator)/算法(Algorithms)/迭代器(iterators)/适配器(Adapters)/返函式()

容器 - 结构与分类

序列式容器:vector/Deque/List/Forward-List等

vector :可变大小数组,支持快速随机访问,一般在其尾部插入元素,用push_back;

deque:双端队列,支持快速随机访问,在首尾都可以插入元素;

list:双向链表,只支持双向顺序访问,在任何位置插入/删除元素都很快;

forward_list:单向链表,只支持单向顺序访问。在链表的任何位置插入或者删除元素都很快;

array:固定大小数组,支持快速随机访问,不能添加/删除元素;


序列式容器

 vector 的size和capabilitiy:vector的size指的是它实际存放的元素个数,vector的capability指的是适配器为它分配的内存大小;

如果标准库容器有一个sort,某些容器本身也有sort,一般是容器自身拥有的sort比较快

deque:每次扩充一个buffer,实际上它不是连续内存,实际上如果++这动作,已经使得迭代器到了容器的末端,deque有一个map,map指向每个buffer的首地址,每次当内存不足,deque就会申请一个buffer。

stack:没有iterator


关联容器

关联容器有8种,分别是set/multiset/map/multimap(按关键字有序保存元素)和nordered_set/norder_multiset/norder_map/norder_multimap(无序集合),其中map是关联数组,保存关键字-值,它们是一一对应的关系;set则是关键字的集合,它只保存关键字;这两个容器中的关键字都是唯一的;multiset和multimap中可以有多个相同的关键字;

值得注意的是关联容器map/multimap中的元素是pair对象;


不定序容器:哈希树(最好的做法:separate chaining)

学习重要网页:www.cplusplus.com

CppReference.com

gcc.gnu.org































原创粉丝点击