C++ primer阅读笔记------------字符串,向量和数组
2017-08-01 20:28
260 查看
该博客用于记录自己在阅读过程中不懂的知识点,很少用到但比较重要的知识点以及模棱两可的知识点
string.size() /length()返回值类型为size_type 不是int(用auto类型来承载,无符号整型数)
string 比较运算符实际上是比较第一个相异的字符
多个字符串相加其中一个必须是string(不能两个都为字面值),连续相加与连续输入输出有相似之处
对每个字符操作: range for 如果要改变原串则需要引用
vector<int> v1(10); //v1 10个元素,每个都被默认初始化
vector<int> v2 {10} // v2 1个元素,初始化为10
vector<int> v3 (10, 1) //v3 10个元素每个都为1
vector<int> v4{10, 1} //v4 两个元素10,1
通常来说圆括号用于构造容器的容量,花括号则可以理解为列表初始化,但例外的情况是,如果花括号中的值不能用于列表初始化则会考虑用于构造容量, 如:
vector<string> v5{10} //10显然不是string类型,所以10被用于构造容量, v5是容量为10的容器,默认初始化
同理:
vector<string> v6 {10, “a”} //v6 10个初始值为“a”的元素
如果循环体里面有向vector添加元素(非常高效,所以通常不指定vector大小)或改变容量的情况,则不能使用range for
iterator //读写
const_iterator //只能读
cbegin和cend返回const_iterator
不清楚元素个数,使用vector不使用数组
int (*ptr)[10] = &arr; //ptr指向一个数组
int (&ptr)[10] = arr; //ptr引用该数组
int *ptr[10]; //指针数组
int &ptr[10]; //错误!!!不存在引用数组
int a[] = {1, 2, 3};
auto pa(a); //pa是指向a数组第一个元素的整型指针
decltype(a) a2={1, 1, 1};
int *b = begin(a); //首元素指针
int *l = end(a); //尾元素指针
两指针相减的类型为ptrdiff_t(代符号)类似size_type(不带符号)是一种标准库类型
如果要用字符数组给字符串赋值,则字符数组应该以空字符结尾
string对象的加法运算允许一个对象是空字符结尾的字符数组(不能2个都是)
当需要用string初始化c风格字符串时用c_str() 例:
const char *str = s.c_str();
然而如上这样使用如果s发生改变str数组也会失去效用,因为返回的是临时指针,所以应当这样使用strcp(str, s.c_str())
不能使用vector初始化数组,但可以用数组初始化vector,但须指明待拷贝区域的首地址和尾地址, 例:
vector<int> myvec(begin(arr), end(arr));
using int_arr = int[4];
typedef int int_arr[4]; //int_arr 即为4个整数组成的数组的别名
string.size() /length()返回值类型为size_type 不是int(用auto类型来承载,无符号整型数)
string 比较运算符实际上是比较第一个相异的字符
多个字符串相加其中一个必须是string(不能两个都为字面值),连续相加与连续输入输出有相似之处
对每个字符操作: range for 如果要改变原串则需要引用
vector<int> v1(10); //v1 10个元素,每个都被默认初始化
vector<int> v2 {10} // v2 1个元素,初始化为10
vector<int> v3 (10, 1) //v3 10个元素每个都为1
vector<int> v4{10, 1} //v4 两个元素10,1
通常来说圆括号用于构造容器的容量,花括号则可以理解为列表初始化,但例外的情况是,如果花括号中的值不能用于列表初始化则会考虑用于构造容量, 如:
vector<string> v5{10} //10显然不是string类型,所以10被用于构造容量, v5是容量为10的容器,默认初始化
同理:
vector<string> v6 {10, “a”} //v6 10个初始值为“a”的元素
如果循环体里面有向vector添加元素(非常高效,所以通常不指定vector大小)或改变容量的情况,则不能使用range for
iterator //读写
const_iterator //只能读
cbegin和cend返回const_iterator
不清楚元素个数,使用vector不使用数组
int (*ptr)[10] = &arr; //ptr指向一个数组
int (&ptr)[10] = arr; //ptr引用该数组
int *ptr[10]; //指针数组
int &ptr[10]; //错误!!!不存在引用数组
int a[] = {1, 2, 3};
auto pa(a); //pa是指向a数组第一个元素的整型指针
decltype(a) a2={1, 1, 1};
int *b = begin(a); //首元素指针
int *l = end(a); //尾元素指针
两指针相减的类型为ptrdiff_t(代符号)类似size_type(不带符号)是一种标准库类型
如果要用字符数组给字符串赋值,则字符数组应该以空字符结尾
string对象的加法运算允许一个对象是空字符结尾的字符数组(不能2个都是)
当需要用string初始化c风格字符串时用c_str() 例:
const char *str = s.c_str();
然而如上这样使用如果s发生改变str数组也会失去效用,因为返回的是临时指针,所以应当这样使用strcp(str, s.c_str())
不能使用vector初始化数组,但可以用数组初始化vector,但须指明待拷贝区域的首地址和尾地址, 例:
vector<int> myvec(begin(arr), end(arr));
using int_arr = int[4];
typedef int int_arr[4]; //int_arr 即为4个整数组成的数组的别名
相关文章推荐
- C++ Primer 第3章 字符串、向量和数组 学习笔记
- 《C++ Primer(第5版)》学习笔记:第3章 字符串、向量和数组
- 第三章 字符串、向量和数组学习笔记(第一遍阅读)
- [C++ primer]第三章笔记--字符串、向量和数组
- C++ primer 5 笔记3 chapter 3 字符串, 向量和数组
- C++ Primer学习笔记之第三章--字符串,向量和数组
- 《 C++ Primer 第五版》笔记(一):1-3章 变量和基本类型,字符串、向量和数组
- C++ Primer 笔记——第三章 字符串、向量和数组
- c++ primer(第五版)学习笔记及习题答案代码版(第三章)字符串、向量和数组
- 《C++ primer》英文第五版阅读笔记(十二)——数组
- C++ primer 读书笔记(第3章)字符串、向量和数组
- C++ Primer 学习笔记(第三章:字符串、向量和数组)
- 《c++primer》笔记 第3章 字符串、向量和数组
- C++字符串、向量和数组笔记
- 【笔记】数组、字符串、向量、指针
- c++ primer第三章 - 字符串、向量、数组
- C++ Primer 第3章 字符串、向量和数组
- [C++ Primer] 第3章: 字符串, 向量和数组
- 《C++ primer》英文第五版阅读笔记(九)——string(字符串)类型
- 《C++ Primer 第五版》学习笔记-第三章-字符串、向量和数组