标签:基本 hash 方式 容器 自定义 长度 gnu table ring
本文所有内容均在 GNU C++ (64位) 里瞎搞出来,有很多猜测,仅供参考
vector/deque/list/forward_list <T, allocator<T> >
set <T, less<T>, allocator<T> >
map <T, U, less<T>, allocator< pair<T, U> > >
unordered_set < T, hash<T>, equal_to<T>, allocator<T> >
unordered_map < T, U, hash<T>, equal_to<T>, allocator< pair<T, U> > >
basic_string/basic_stringstream <T, char_traits<T>, allocator<T> >
queue/stack <T, deque<T> >
priority_queue <T, vector<T>, less<T> >
array <T, N>
bitset <N>
容器 | sizeof | 扩容方式 | 内存释放方式 |
---|---|---|---|
vector | 24 | 每次两倍 | 不释放 |
deque | 80 | 初始512字节,每次512字节+少量额外内存 | 基本释放 |
list | 16 | 要多少申请多少 | 不留多余内存 |
forward_list | 8 | 要多少申请多少 | 不留多余内存 |
(multi)set/map | 48 | 要多少申请多少 | 不留多余内存 |
unordered_(multi)set/map | 56 | 要多少申请多少+桶的内存 | 桶不释放,其余不留多余内存 |
string | 8 | 每次两倍+少量额外内存 | 不释放 |
stringstream | 368 | 初始512字节,每次两倍+少量额外内存 | 不释放 |
list
的 size()
是 \(O(n)\) 的!(forward_list
干脆不定义这个函数),想用 list
代替 deque
的同学要注意这个坑点标签:基本 hash 方式 容器 自定义 长度 gnu table ring
原文地址:https://www.cnblogs.com/axiomofchoice/p/13659385.html