• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
nathaniel pong
一个小子在默默的学习
博客园    首页    新随笔    联系   管理    订阅  订阅

顺序容器

容器(如同一种线性链表的数组)

顺序容器:单一类型的元素,排列顺序与元素添加的次序有关。

三种顺序容器:vector list deque

定义某种类型的容器的时候必须在容器名后面加一对尖括号,里面填充元素的类型。

所有容器的默认构造函数都是创建一个空对象。

 

容器元素的初始化:

  1. C<T> c创建了一个名为c的空容器。C的容器的类型,T为元素的类型。使用于所有的容器。
  2. C c(c2) 创建容器c2的副本c,两者必须有相同的容器类型,必须存放相同类型的元素。适用于所有容器。
  3. C c(b,e) 创建c,元素为迭代器b,e之间的元素副本。不要求容器的类型相同,也不需要元素类型相同,只要是兼容的就可以。E是永远都不可能超过B。适用于所有容器。
  4. C c(n,t) 用n个值为t的元素初始化闯将的容器c,t的类型必须与C的类型匹配。只适用于顺序容器。
  5. C c(n) 创建有n个值初始化元素的容器c。只适用于顺序容器。

 

容器内的元素的类型约束:

 元素的类型必须可以赋值和复制的。注意:不要使用引用类型。

 

容器迭代器的操作:见c++primer P 268~269

 

顺序容器元素的添加:(注意添加后迭代器可能会失效,注意重定位)

   1.c.push_back(t)

   2. c.push_front(t)  在前端插入,只用在list和deque中

   3. c.insert(p,t) 在迭代器p之前插入值为t的新元素。

   4. C.insert(p,n,t) 在迭代器p之前插入N个值为t的新元素。

   5. c.insert(p,b,e) 在迭代器p之前插入由迭代器b到迭代器e之间的新元素。

 

顺序容器大小的操作:(注意迭代器的重定位)

Size和empty为已知。

c.resize(n)  调整容器的长度为n,“多除少补””后部删除,后部添加”

c.resize(n,t)  调整容器的长度为n,“多除少补”新添加的元素初始化为t.

 

顺序容器中元素的删除:(保证迭代器的有效性)

1.c.erase(p)  删除迭代器p指向的元素,返回一个迭代器指向被删除的元素后面的元素。

2.c.erase(b,e)删除迭代器b和e之间的所有元素,返回一个迭代器指向被删除元素的后面的元素,如果e为超出末端的下一位置,则返回迭代器指向容器末端的一下位置。

3.c.clear()  清空容器,返回空指针。

4.c.pop_back()  删除容器最后一个元素,返回void

5.c.pop_front()  删除容器的第一个元素,返回void  只用于list和deque。

 

容器之间的赋值操作实际是先删除左操作数的所有元素,再将右操作数的所有元素都插入到左边的容器中。赋值后两个容器完全相同。

操作:1.c1.swap(c2);交换c1和c2的内容,但是迭代器不会失效。减少了删除元素的成本。

        交换的对象必须是同类型的容器,和元素的类型是相同的。

      2. c.assign(b,e) 重新设置c中的元素,将迭代器之间的元素都赋值到c中,b,e必须不是只想c中元素的迭代器。

      3. c.assign(n,t) 将c容器重新设置为n个值为t的对象。

posted on 2012-07-14 22:24  nathaniel pong  阅读(68)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3