C++Primer学习笔记12.6

73 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情

3.2 标准库类型string

标准库类型string表示可变长的字符序列

3.2.1 定义和初始化string对象

初始化string的方式

string s1默认初始化,s1是一个空串
string s2(s1)s2是s1的一个副本
string s2 = s1等价于上一条
string s3("value")s3是字面值"value"的副本,除了字面值最后的空字符
string s4(n, 'c')s4初始化为连续n个字符c组成的串

3.2.2 string对象上的操作

string::size_type类型

有几种定义的配套类型体现了标准库类型与机器无关的特性,类型size_type就是其中的一种

它是一个无符号类型的值,而且能够存放下任何string对象的大小

c++11新标准允许通过auto或者decltype来推断变量类型

suto = len = line.size(); len的类型是string::size_type

string对象相加

string s1 = "hello", s2 = "world\n";
string s3 = s1+s2; //s3 = "helloworld\n"
s1 += s2;
string s4 = s1 + "," + s2; 

**注意:当string和字面值混合相加时,必须确保每个+的两侧的运算对象至少有一个是string

string s4 = "hello" + "," + s2; //err

警告:C++语言中的字符串字面值并不是标准库类型string的对象,切记,字符串字面值与string是不同的类型

范围for语句

想要基于for语句改变string对象中字符的值,必须把循环变量定义成引用类型。如果只是单纯的遍历则不需要

for (auto &n : nums)

注意:无论何时使用到字符串的下标,都应该注意检查其合法性

3.3 标准库类型vector

标准库类型vector表示对象的集合。vector是一个类模板,模板本身不是类或函数,相反可以将模板看成编译器生成类或函数编写的一份说明。编译器根据模板创建类或函数的过程称为实例化

警告:对于某些编译器可能仍需要老实声明来处理vector的vector对象,如vector<vector<int> >