《C++ Primer》读书笔记-第三章 03 标准库类型vector
来源:互联网 发布:医疗数据采集网关 编辑:程序博客网 时间:2024/04/30 14:56
作者:马志峰
链接:https://zhuanlan.zhihu.com/p/23498837
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
链接:https://zhuanlan.zhihu.com/p/23498837
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
声明:
- 文中内容收集整理自《C++ Primer 中文版 (第5版)》,版权归原书所有。
- 原书有更加详细、精彩的释义,请大家购买正版书籍进行学习。
- 本文仅作学习交流使用,禁止任何形式的转载
学习vector的时候可以和string对比学习
- 定义和初始化
- 支持的操作
- 处理vector对象中的字符
- 范围for语句
- 下标运算符
- 迭代器
定义和初始化
初始化vector对象的方式
vector<T> v1 vector<T> v2( v1 ) vector<T> v2 = v1 vector<T> v4( n ) vector<T> v3( n, val ) vector<T> v5{ a, b, c... } vector<T> v5 = { a, b, c... }
详细释义见《C++ Primer》第五版(中文版) P87,表3.4
注意vector是一个模板类,在定义时需要指明vector将要容纳哪种类型的对象,编译器根据指定的类型进行实例化
vector<int> iVec; vector<string> sVec; vector< vector<string> > file;
对于vector的初始化,有两个情况需要注意
- T是int类型时,注意区分()和{}
- 如果使用列表初始化的形式,但列表中的值不能用来初始化vector,则会尝试用列表中的值来构造vector对象
对于第1点,严格按照表格来理解就可以了
vector<int> v1( 10 ); vector<int> v2{ 10 }; vector<int> v3( 10, 1 ); vector<int> v4{ 10, 1 );
对于第2点,
vector<string> v7{ 10 }; //v7有10个元素 vector<string> v8{ 10, "hi " }; //v8有10个“hi”
可以理解为,当 {} 不能顺利初始化的时候,会尝试替换成 () 进行初始化
支持的操作
v.empty() v.size() v.push_back() v[n] v1 = v2 v1 = { a, b, c... } v1 == v2 v1 != v2 <, <=, >, >=
详细释义见《C++ Primer》第五版(中文版) P91,表3.5
元素的访问
- 范围for
- 下标
- 迭代器
和string的用法类似
同样要时刻注意下标不能越界,下标越界有可能导致程序异常
vector<int> v{ 1, 2, 3, 4 }; for( auto &i : v ) { i *= i; } for( auto i : v ) { cout << i << " "; } cout << endl;
上面的程序将v中的每个元素求平方并输出
作者说:
- vector能在运行时高效快速的添加元素。因此使用vector比较高效的一种方法就是先定义一个空的vector,再在运行时向其中添加具体值
- 范围for语句体内不应改变其所遍历序列的大小
- vector对象(以及string对象)的下标运算符可用于访问已存在的元素,而不能用于添加元素
- 确保下标合法的一种有效手段就是尽可能使用范围for语句
来自学习群的反馈:
刚好前几天学习群的一位码友说发现了string的奇怪现象
string s; s[0] = 'a'; s[1] = '\0';
根据作者说的第3条,上面的程序是不合法的,但实际情况是对s[0]赋值并不会报错,运行时也未出现异常。
大家知道这个问题怎么解释吗?
0 0
- 《C++ Primer》读书笔记-第三章 03 标准库类型vector
- 《C++ Primer》读书笔记第三章-2-标准库类型vector
- 《C++Primer》 第三章 标准库类型
- C++primer第三章:标准库类型
- C++ Primer 第三章 标准库vector类型
- C++primer(第五版)第三章中标准库类型Vector、迭代器和数组
- c++ primer读书笔记-第三章 标准库类型
- C++ primer 读书笔记--第三章 标准库类型
- 《C++ Primer》读书笔记-第三章 02 标准库类型string
- 《C++ Primer》读书笔记第三章-1-标准库类型string
- C++primer 3.3 标准库类型 vector
- 《C++Primer》读书笔记---标准类型库
- C++Primer笔记 第三章 标准库类型
- C++Primer 学习笔记 第三章(标准库类型)
- C++primer学习笔记-第三章标准库类型
- C++primer第4版第三章标准库类型
- 【C++ Primer】【学习笔记】【第三章】标准库类型之:vector类型
- 《c++ primer》学习笔记 第三章 标准库类型(string, vector,bitset)
- Linux内核高性能测试工具pktgen的简单使用
- Spring通过RestTemplate传送数据
- 罚函数(penalty function)的设计
- 小白如何玩转Java的数据结构—轻松理解学习
- CSS深入理解之padding
- 《C++ Primer》读书笔记-第三章 03 标准库类型vector
- Http 协议总结
- javascript中数组的使用
- duplicateParentState子控件响应父控件绘图状态而不响应点击事件
- prlindrome partition ii
- 《C++ Primer》读书笔记-第三章 04 迭代器
- IP、子网掩码、网关、DNS、DHCP到底都是什么意思
- Arrays.sort()使用两种方式(Comparable和Comparator接口)对对象或者引用进行排序
- jQuery的事件