STL 容器 002 (vector 详解)

打印 上一主题 下一主题

主题 1695|帖子 1695|积分 5085

为什么

各方面表现都比较中等, 适用范围广
尾插很快, 查找也比较快
是什么

动态数组

特点:

  • 动态数组, 三个指针控制
  • 两倍增长

    • 扩充的方法: 不能原地扩充, 因为后面可能会有其他的东西, 必须在 其他地方开辟一块更大的内存

  • 提供[]

    • 所有的有连续空间的容器都有[]

  • iterator是class类型的
怎么样

制造

  • 两倍增长
    1. //push_back() 检查剩余的空间
    2. //有, 继续增长
    3. //没有,计算
    4.         //开始是不是0
    5.                 //是0 放1个
    6.         //不是0 分配两倍的空间
    7.     //将原来内容拷贝到新的vector   (拷贝构造)
    8.     //原来的要删掉(析构)
    9.     //插进最新push_back的元素
    复制代码
使用
<ol>初始化
  1. //重载
  2. vector<int>vec = {1,2,3};
  3. //拷贝
  4. vector<int>vec1(vec);
  5. vector<int>vec2(100,5);                //100个5
  6. vector<int>vec3(100)                //100个0
  7. //直接添加元素
  8. vector<int>vec{1,2,3};
  9. //复制数组
  10. int i[5] = {1,2,3,4,5};
  11. vector<int>vec(i,i+5);
复制代码
状态查看(主要是容量)
  1. //返回元素个数
  2. vec.size();
  3. //返回扩容后最多能容纳的元素个数
  4. vec.max_size();
  5. //返回分配的容量
  6. vec.capacity();
  7. //是否为空, 为空就返回true
  8. vec.empty();
复制代码
改变capacity与size
[code]//容量设为100vec.reserve(100);//如果capacity

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

瑞星

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表