2015-09-16-容器

顺序容器

标准库的三种顺序容器为:vector,list,deque。顺序容器的元素排列次序与元素值无关,而是由元素的添加顺序有关。

顺序容器
vector      支持快速随机访问
list        支持快速插入/删除
deque       双端队列
相应的适配器
stack       LIFO
queue       FIFO
priority_queue  有优先级管理的队列

容器元素初始化

C<T> c;             //空容器
C<T> c(c2);         //c2的容器副本c,c与c2必须具有相同的容器类型与相同类型的元素
C<T> c(b,e);            //
C<T> c(n,t);            //n个值为t的容器c
C<T> c(n);          //

不相同的容器类型之间不能直接将元素复制给彼此。但允许传递一对迭代器间接实现。需要注意指针也是迭代器。

vector<string> svec;
list<string> slist(svec.begin(),svec.end());    //C<T> c(b,e)

接受容器的大小做形参的构造函数只使用于顺序容器,关联容器不支持这种初始化。

容器内元素的类型约束

1.元素类型必须支持复制运算

2.元素类型必须可复制

C<T> T为类时,若没有默认的构造函数,初始化时需要注意!

C<T> c;     //ok
C<T> c(n);      //error
....

容器的容器

C< C<T> > c; //> > not >>

迭代器及其范围

只有vector,deque慢做的运算:iter+n,iter-n,iter1+=iter2,iter1-=iter2,>,<,>=,<=。

C++使用一对迭代器标记迭代器的范围,[first,last)。

迭代器的操作

//插入元素
c.push_back(t)
c.push_front(t)         //list,deque
c.insert(p,t)
c.insert(p,n,t)
c.insert(p,b,e)         //p前插入

//访问元素
c.back()
c.front()
c[n]                //vector,deque
c.at(n)             //vector,deque

//删除元素
c.earse(p)          //删除p指向的元素,并返回被删除元素后面的迭代器(指针)
c.earse(b,e)
c.clear()
c.pop_back()
c.pop_front()           //list,deque

//赋值与swap
c1=c2
c1.swap(c2)
c.assign(b,e)           //重新设置c的元素
c.assign(n,t)       

vector容器的自增长

vector有size,capacity两种区别,size为vector的实际长度,capacity为vector的容器,size<=capacity,通常是小于。

关联容器

关联容器通过键(key)的存储来读取元素(value)。主要有map,set两种类型,以及根据他们延伸的multimap,multiset

pair类型

pair<T1,T2> p;
pair<T1,T2> p(v1,v2);
make_pair<v1,v2> ;
p1 < p2
p1 == p2
p.first
p.second

map类型

map是key-value对集合。通过key来读取value。

1.构造函数

map<k,v> m;
map<k,v> m(m2);
map<k,v> m(b,e);               //b,e为迭代器

2.map类定义的类型

map<k,v>::key_type      //map中key的类型
map<k,v>::mapped_type       //map中value的类型
map<k,v>::value_type        //pair类型

3.给map添加元素

map<string,int> word_count;
word_count["Anna"] = 1;     //使用“下标”访问,若不存在,则创建键为"Anna"的元素

//map::insert
m.insert(e)
m.insert(beg,end)
m.insert(iter,e)

使用小标的副作用是,当map中没有该键时,会插入一个具有该键的新元素。

3.查找并读取map中元素

m.count(k)  //返回m中k出现的次数0或1
m.find(k)   //返回元素,或返回超出末端的迭代器

4.删除元素

m.erase(k)  //删除键为k的元素
m.erase(p)  //删除迭代器p指向的元素
m.erase(b,e)    //迭代器b到e之间的元素

5.map对象迭代遍历

还是begin,end迭代器。

set类型


版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2015-10-02 00:18  mlhy  阅读(94)  评论(0编辑  收藏  举报