c++ container

来源:互联网 发布:淘宝为什么分数低 编辑:程序博客网 时间:2024/06/08 04:35
容器:特定对象的集合
顺序容器:单一元素的集合,根据位置存储和访问对象


三种顺序容器:
vector deque list
快速随机访问 双端队列 快速插入、删除


初始化
Container<T> c
Container<T> c(n)
Container<T> c(ita, itb)
Container<T> c(n, x) 要求顺序容器
Container<T> c(anoc)
元素必须支持赋值,可以复制


::iterator it
*it
it->mem
++ --
> >= < <=,= - += -= 只适用于vector, deque


添加元素
.push_back() okok
none ok ok
.insert(it, x) okok
.insert(it, ita, itb) okok
.insert(it, n, x) okok


大小
.size() ok ok
.max_size() okok
.empty() ok ok
.resize(n) ok ok
.resize(n, x) okok


访问
[i] ok none
.at(i) ok none
.front() ok ok
.back() ok ok


删除
.erase(it++) okok
.erase(ita, itb)ok ok
.pop_back() okok
.clear() ok ok
none .pop_front()ok

赋值
c = anoc
.asign(ita, itb)
.asign(n, x)
.swap(anoc)


每次容量自增长为当前容量的3/2


vector与deque存储空间连续,支持随机访问,vector末尾插删快捷,其他位置开销大,deque首尾插删快捷
list存储空间不连续,任意位置插删开销小


顺序容器适配器:stack, queue, priority_queue
容器适配器就是利用容器提供统一的接口,隐藏背后的容器细节


stack,可以建立在vector, deque, list上
.empty() .size().push() .pop().top()


queue,要求提供.push_front(),建立在list上
.empty() .size().push_back() .pop().front() .back()
.push_front()


priority_queue,要求随机访问,建立在vector, deque上
.empty() .size().push() .pop().top()


#include <map>
map自动对key进行排序
map<Tone, Ttwo> m;
.size()
.max_size()
.empty()
查找
attwo = m[atone] 1)有,返回 2)无,赋默认值 若value为对象,开销较大
map<Tone, Ttwo>::iterator it = m.find(atone) if (it == m.end()) ...none


插入
m[atone] = attwo 查询,1)有,更新 2)无,插入
.insert( map<Tone, Ttwo>::value_type(atone, attwo) ) -> pair<iterator, bool>
iterator insert(iterator pos, const value_type &x);


删除
.erase(it)
.erase(ita, itb)
.clear()
.erase(const Tone &)


m::value_type , key_type, mapped_type
pair(Tone, Ttwo) apair; apair.first; apair.second;


std::for_each(m.begin(), m.end(), print_pair) print_pair是函数指针
0 0