C++ 容器类与Qt容器类对比 (2)连续容器类

容器类共享公共的接口,这使标准库更容易学习,只要学会其中一种类型就能运用另一种类型。标准库定义了三种顺序容器类型:vector、list 和 deque(是双端队列“double-ended queue”的简写,发音为“deck”)。它们的差别在于访问元素的方式,以及添加或删除元
摘要由CSDN通过智能技术生成

/*******************************

这节本来是想回顾一下关于连续容器的一些内容。但是,发现如果只回顾连续容器类的定义和初始化,内容就太少了。这里只回顾下尽量与迭代器不太相关的容器类操作。迭代器将在下一章重点回顾。

********************************/



容器类共享公共的接口,这使标准库更容易学习,只要学会其中一种类型就能运用另一种类型。标准库定义了三种顺序容器类型:vector、list 和 deque(是双端队列“double-ended queue”的简写,发音为“deck”)。它们的差别在于访问元素的方式,以及添加或删除元素相关操作的运行代价。



1,所有的容器都是类模板。要定义某种特殊的容器,必须在容器名后加一对尖括号,尖括号里面提供容器中存放的元素的类型:

     vector<string>    svec;       // empty vector that can hold strings
     list<int>         ilist;      // empty list that can hold ints
     deque<Sales_item> items;      // empty deque that holds Sales_items

vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。和 string 对象一样,标准库将负责管理与存储元素相关的内存。容器中的所有对象都必须是同一种类型的。vector是标准C++建议替代C数组的动态数组模型,它维护的是一个连续线性空间。特点支持快速随机访问。

List 就是一双向链表,可高效地进行插入删除元素。包括构造、方法等。相对于vector的连续线性空间,list就显得复杂许多,与向量(vector)相比, 它允许快速的插入和删除,且每次插入或删除一个元素,就配置或释放一个元素空间。因此,list对于空间的运用绝对的精准,一点也不浪费。而且,对于任何位置的元素插入或元素移除,list永远是常数时间。特点支持快速插入/删除。

deque容器类,vector是单向开口的连续线性空间,deque则是以中双向开口的连续线性空间。所谓双向开口,意思是可以在头尾两端分别做元素的插入和删除操作。从技术的角度而言,vector当然也可以在头尾两端进行操作,但是其头部操作效率奇差、令人无法接受。deque是由一段一段的定量连续空间构成。



2,这里vector<vector<T> >后面两个尖括号要空格。《C++ Primer 4th》 9.1.1节讲述的有连续容器类的构造函数和一些特殊的构造方法。

C<T> c;
//创建一个名为 c 的空容器。C 是容器类型名,如 vector,T 是元素类型,如 int 或 string 适用于所有容器。

C c(c2);
//创建容器 c2 的副本 c;c 和 c2 必须具有相同的容器类型,并存放相同类型的元素。适用于所有容器。


C c(b, e);
//创建 c,其元素是迭代器 b 和 e 标示的范围内元素的副本。适用于所有容器。

C c(n, t);
//用 n 个值为 t 的元素创建容器 c,其中值 t 必须是容器类型 C 的元素类型的值,或者是可转换为该类型的值。只适用于顺序容器

C c(n);
//创建有 n 个值初始化(第 3.3.1 节)(value-initialized)元素的容器 c。只适用于顺序容器


Containers of Containers 容器的容器

注意,在指定容器元素为容器类型时,必须如下使用空格:

     vector< vector<string> > lines; // ok: space required between close >
     vector< vector<string>> lines; // error: >> treated as shift operator


3,大多数类型都可用作容器的元素类型。容器元素类型必须满足以下两个约束:
    1、The element type must support assignment.
    元素类型必须支持赋值运算。
    2、We must be able to copy objects of the element type.
    元素类型的对象必须可以复制。


4,Each sequential container defines a set of useful typedefs and supports operations that let us
每种顺序容器都提供了一组有用的类型定义以及以下操作:
    1,Add elements to the container.           在容器中添加元素。 7
    2,Delete elements from the container.   在容器中删除元素。 10
    3,Determine the size of the container.   设置容器大小。         11
    4,Fetch the first and last elements from the container, if any.(如果有的话)获取容器内的第一个和最后一个元素。


5,容器定义的类型别名 Container Typedefs(或许应该讲迭代器的时候再详述)


6,容器的 begin 和 end 操作 

c.begin()


    Yields an iterator referring to the first element in c</

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值