Vector

1、vector能容纳绝大多数类型的对象作为其元素,但是因为引用不是对象,所以不存在包含引用的vector

2、Vector是一个类模板,实例化

(1) Vector<int> ivec;

(2) Vector<Sales_item> Sales_vec;

(3) Vector<vector<string>> file;

3、定义和初始化vector对象

(1) Vector<T> v1;

(2) Vector<T> v2(v1);

(3) Vector<T> v2 = v1;

(4) Vector<T> v3(n, val);  v3包含了n个重复的元素,每个元素的值都是val

(5) Vector<T> v4(n);   v4包含了n个重复地执行了值初始化对象

(6) Vector<T> v5{a, b, c ...)   v5包含了初始值个数的元素,每个元素被赋予相应的初始值

(7) Vector<T> v5 = {a, b, c ...}  等价于(6)

(6)、(7)新版本才能用(C++ 11新标准)

4、Vector操作

(1) V.empty()      如果v不含有任何元素,返回真;否则返回假

(2) V.size()        返回v中元素的个数

(3) V.push_back(t)  向v的尾端添加一个值为t的元素

(4) V[n]           返回v中第n个位置上元素的引用

(5) V1 = v2        用v2中元素的拷贝替换v1中的元素

(6) V1 == v2       v1和v2相等当且仅当它们的元素数量相同且对应位置      的元素都相同

(7) V1 != v2

(8) <, <=, >, >=     顾明思义,以字典顺序进行比较

5、迭代器  ---  提供了对对象的间接访问,其对象是容器中的元素或string对象中的字符

Auto b = v.begin(), e = v.end();

(1) 迭代器运算符

① *iter  返回迭代器所指元素的引用

② Iter->mem解引用iter并获取该元素的名为men的成员,等价于(*iter).mem

③ ++iter    令iter指示容器中的下一个元素

④ --iter     令iter指示容器中的上一个元素

⑤ Iter1 == iter2   判断两个迭代器是都相等(不相等),如果两个迭代

⑥ Iter1 != iter2   器指示的是同一个元素或者他们是同一个容器的尾后迭代器,则相等;反之,不相等。

(2) 迭代器类型

① Vector<int>::iterator it;   it能读写vector<int>的元素

② String::iterator it2;   it2能读写string对象中的字符

③ Vector<int>::const_iterator it3;  it3只能读元素,不能写元素

④ String::const_iterator it4;    it4只能读字符,不能写字符

(3) 凡是使用了迭代器的循环体,都不要向迭代器所属的容器添加元素。

(4) 使用迭代器完成一个二分搜索

Auto beg = text.begin(), end = text.end();

Auto mid = text.begin() + (end - beg) / 2;

While (mid != end && *mid != sought) {

If (sought < *mid)

End = mid;

Else

Beg = mid + 1;

Mid = beg + (end - beg) /2;

}

6、vector对象是如何增长的?

标准库实现者采用了可以减少容器空间重新分配次数的策略。当不得不获取新的内存空间时,vector和string的实现通常会分配比新的空间需求更大的内存空间。容器预留这些弓箭作为备用,可用来保存更多的新元素。这样,就不需要每次添加新元素都重新分配容器的内存空间了。

这种分配策略比每次添加新元素时都重新分配容器内存空间的策略要高效得多。其实际新能也表现得足够好——虽然vector在每次重新分配内存空间时都要移动所有元素,但使用此策略后,其扩张操作通常比list和deque还要快。

Vector的实现采用的策略似乎是在每次需要分配新内存空间是将当前容量翻倍。

7、Capacity和size

容器的size是指它已经保存的元素的数目;而capacity则是在不分配新的内存空间的前提下它最多可以保存多少元素。

C++ primer——vector相关推荐

  1. C++ Primer第18章Vector的再实现及bug修正

    C++Primer第18.1.2节在介绍allocator类的时候,给了一个仿照标准库中vector的例子.感觉示例代码非常好,但是本人发现了一个bug,与大家共享. 按照作者的示例程序,编译程序时总 ...

  2. C++ primer: C++标准库中vector类模板

    (C++ primer读书笔记)2013.3.19 zzy @Library4D vector是同一种类型对象的集合,每个对象都有一个对应的整数索引值.vector称为容器.使用前包含vector头文 ...

  3. Vector用法(C++ Primer中文版)

    vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值.和 string 对象一样,标准库负责管理存储元素的相关内存.我们把 vector 称为 容器 ,是因为它可以包含其他对象.一 ...

  4. C++ Primer 5th笔记(9)chapter9 顺序容器 vector 容器的自增长 容器适配器

    1. vector 容器的自增长:当插入元素当存储空间不足时,vector 必须重新分配存储空间(比如将新空间大小增加为当前大小的2倍) 管理容量的成员函数 操作 定义 c.shrink_to_fit ...

  5. C++ Primer 5th笔记(3)字符串、向量和数组:向量vector

    vector是一个类模板(c++还有函数模板),编译器需要实例化. 1. 定义和初始化vector对象 类型名称 类型定义 vector v1 空vector vector v2(v1) v1 vec ...

  6. C++ Primer(第四版) 课后习题3.14 vector单词转大写

    问题: 读入一段文本到 vector 对象,每个单词存储为 vector  中的一个元素.把 vector对象中 每个单词转化为大写字母.输出 vector 对象中转化 后的元素,每 8 个词为一行输 ...

  7. 《C++ Primer 第五版》(第2.5节,第3.1-3.4节) ——采用预处理功能编写头文件,string初始化和字符操作,vector初始化和迭代器

    1.采用预处理功能编写头文件 在头文件定义(头文件中的内容是只能被定义一次的实体)过程中,为了防止头文件重复包含的情况,采用预处理器的一个头文件保护符功能,格式为:{  #ifndef 预处理变量(通 ...

  8. C++primer 第 3 章 字符串、向量和数组 3 . 3 标准库类型vector

    标准库类型vector表示对象的集合,其中所有对象的类型都相同.集合中的每个对象都有一个与之对应的索引,索引用于访问对象.因为vector"容纳着"其他对象,所以它也常被称作容器( ...

  9. C++primer第九章 顺序容器 9.4 vector对象是如何增长的

    为了支持快速随机访问,vector将元素连续存储,每个元素紧挨着前一个元素存储.通常情况下,我们不必关心一个标准库类型是如何实现的,而只需关心它如何使用.然而,对于vector和string,其部分实 ...

最新文章

  1. 38首经典华语情歌E文版
  2. 自定义grains_module pillar
  3. Mysql数据库中修改库名的的方法
  4. linux mmap 内存映射
  5. sqoop 增量导入mysql_sqoop增量导入数据库
  6. 树莓派更换软件源提高下载速度
  7. python库安装错误 in _error_catcher解决之镜像安装
  8. SQL Server2008 查找用户登录日志
  9. 『Linux』ArchLinux与VirtualBox的结合「二」
  10. [数据模型] 数据表三种关联的概述
  11. AD原理图 PCB设计步骤
  12. Morketing Summit 2019“破·局”:有破有立,突破棋局 | MS2019灵眸·全球营销商业峰会全面启动!...
  13. 基于ESP8266的太空人智能时钟
  14. 基于微信小程序的校园二手物品交易平台的设计与实现
  15. html5 css3鼠标滑过效果,Hover.css纯CSS3鼠标滑过特效动画库
  16. 苹果、李子、橙python_苹果 石榴 核桃 李子永清村念“水果经”
  17. 地球坐标、 火星坐标、百度坐标转换
  18. python中excel基本操作实例
  19. File Browser安装及命令用法
  20. 中标捷报 | 南大通用GBase 8a中标泉州银行

热门文章

  1. spring boot 日志文件配置(logback-spring.xml)亲测可用!
  2. 一句代码实现 HTML5 语音搜索
  3. Django:视图和URL配置
  4. 一道关于 ARRAY 深度展开的面试题
  5. 深度 | 人工智能全局概览:通用智能的当前困境和未来可能
  6. linux设备驱动归纳总结(六):2.分享中断号【转】
  7. 沪深300股指期权和上证所深交所上市的两个沪深300ETF期权的区别
  8. same things betewen university and companies
  9. https://toonify.photos/ for Disney style
  10. reciprocity