C++ 学习笔记之(3)-字符串、向量和数组
命名空间的using声明
C++的命名空间的目的是为了防止名字冲突。为了使用命名空间的成员,可以使用using
声明。有了using
声明就无需专门的前缀,using
声明的形式如下
using namespace::name;
- 每个名字都需要独立的
using
声明。 - 头文件不应该包含
using
声明,这是因为头文件的内容会拷贝到所有引用它的文件中去,如果头文件里有某个using
声明,那么每个使用了该头文件的文件都会有此声明。可能会导致名字冲突
注意:命名空间需要深入学习
标准库类型 string
标准库类型string
表示可变长的字符序列,string类型定义在命名空间std
中。
定义和初始化 string 对象
- 直接初始化:不使用等号的初始化
- 拷贝初始化:使用等号
=
初始化一个变量,编译器把等号右侧的初始值拷贝到新创建的对象中去。
注意:直接初始化和拷贝初始化需要深入学习
string 对象上的操作
类除了定义初始化其对象的方式外,还要定义对象所能执行的操作。
如果表达式中存在
size()
函数,就不要再使用int
类型了,因为size
函数返回的是string
类的配套类型string::size_type
, 一个无符号类型的值,混用int
和unsigned
会出现问题。标准库允许把字符字面值和字符串字面值转换成
string
对象,即可以将其混用在一条语句中使用,但必须确保每个加法运算符两侧的运算对象至少有一个是string
string s1 = "hello", s2 = "world"; string s3 = s1 + ", " + s2 + '\n';
由于历史原因,且为了与
C
兼容,C++中的字符串字面值并不是标准库类型string
的对象。切记,字符串字面值与string
是不同的类型。
处理 string 对象中的字符
我们经常需要单独处理string
对象中的字符,cctype
头文件定义了一组标准库函数处理这部分工作
C语言头文件形如
name.h
, C++将其命名为cname
, C++程序应该使用后者,因为标准库的名字总能在命名空间std
中找到,若使用.h
头文件,则无法找到。C++11使用范围
for
语句可以对string
对象的每个字符操作,如果要改变string
队形中该字符的值,必须把循环变量定义成引用类型。for(auto &c: str) c = toupper(c); // c 是一个引用,因此赋值语句将改变 s 中字符的值