C++学习笔记(一):初探容器

定义
vector是容纳特定类型对象的集合, 
它根据位置来存储和访问这些元素, 这就是顺序容器, 顺序容器的排序次序与元素值无关, 而是由元素添加到容器里的次序决定的

谈谈标准库
标准库定义了三种顺序容器类型:vector  list  deque(双端队列)  
       它们的差异
       它们的差别在于访问元素的方式,以及添加或删除元素相关的操作的运行代价
     标准库还提供了三种容器适配器: 适配器是根据原始的容器类型所提供的操作, 通过定义新的操作接口, 来适应基础的容器类型
  
      顺序容器适配器包括: stack、queue和priority_queue类型

     顺序容器类型所包含的头文件: #include <vector>, <list>, <deque>.
    
   注意: 所有容器都是类模板。  
 
    容器既然是类模板,那么就是类, 就有类的性质, 就有初始化:
    C<T> c;   默认初始化
    C  c(c2);    创建容器c2的副本
    C  c(b, e);   b, e为两个迭代器, 使用迭代器时,不要类型相同
    C  c(n, t);   创建n个值为t的元素创建容器c
    C  c(n);  创建有n个值初始化

   容器的迭代器就是一个静态成员

    vector<String>::iterator mid  //它的功能是指定迭代器的位置并对数据进行访问

   迭代器介绍
      标准库为每一种标准容器定义了一种迭代器类型。 它提供了比下标操作更通用化的方法
      因此,如果从下标访问这个角度看:  它应该是一个指针

     每一个容器都提供了开始和结束操作, 插入和删除操作, 检测大小操作
  
     如果迭代器是从开始进行, 可以为:
     vector<int>::iterator iter=ivec.begin();     

     容器内元素的类型约束
     满足两个约束: 1 必须支持赋值操作 2 元素类型的对象必须可以复制
     除了引用类型, 所有内置或复合类型都可以用作元素类型。标准库里,除了IO类型之外,其它都是有效的容器元素类型。 包括容器本身
     
     上述是容器要求元素类型的最低要求, 一些容器为了满足特殊的操作, 还需要元素类型满足特殊要求

      假设: 类Foo没有默认构造函数, 即它不能通过以下操作初始化  Foo foo; 因为他没有默认构造函数,因此系统不会默认给值
      但是它定义了一个需要int形参的构造函数, 即Foo foo(1).
      
     如果考虑一个Foo类型的容器, 那么就有
     vector<Foo> empty;  该操作表示没有进行任何初始化操作, 即该容器有0个元素, 这是可以的
     vector<Foo> bad(10), 该操作表示给Vector容器创建了 10个Foo类型的元素, 但是这10个Foo类型的元素没有进行初始化, 这是肯定不行的。
     一种比较好的方式是: vector<Foo>bad(10,1) 表示创建了10个初始化为1的Foo类型


    容器的容器
     这个目前还想不到有何必要  大体可以写成如下格式:
      vector< vector<string> > lines
      注意: 不要写成  vector< vector<string>> lines 编译器会把>>当中位位移


    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值