字符串字面值是一种通用的结构实例,是c++由c继承的c风格字符串,它不是一种类形,而是为了表达和使用字符串而形成的一种约定俗成的写法,按此写法书写的字符串存放在字符数组并以空字符结束,空字符结束的意思是在字符串最后一个字符后面跟着一个空字符\0。
C标准String函数
传入此类函数的指针必须指向以空字符作为结束的数组。
比较字符串
String对象用普通关系运算符和相等性运算符。
如果把这些运算符用在C风格字符串上,实际比较的是指针而非字符串本身。
数组其实真正是指向数组首元素的指针。
对大多数应用来说,使用标准库string比使用C风格字符串要更安全。
混用String对象和C风格字符串
允许使用字符串字面值来初始化string对象。
任何出现字符串字面值的地方都快可以使用以空字符结束的字符数组来替代。
1.允许使用以空字符结束的字符数组来初始化String对象或为String对象赋值。
2.在string对象的加法运算中,允许使用以空字符结束的字符数组作为其中一个运算对象(不能两个都是)
string对象的符合符合赋值运算允许使用以空字符结束的字符数组作为右侧的运算对象。
反过来就不成立了,不能用string对象直接初始化指向字符的指针,为了完成此类操作,string提供了一个c_str的函数。
string s;
char *str=s;//错误 不能用string对象初始化char*
const char*str=s.c_str();//√
c_str的返回值是一个C风格的是字符串,函数的返回值是一个指针,指针指向一个以空字符结束的字符数组。
WARNING 如果执行完c_str()函数后程序向一直能使用其返回值,最好将该数组重新拷贝一份。
使用数组初始化vector对象
不允许使用一个数组为另一个内置类型的数组赋初值,也不允许使用vector对象初始化数组,允许使用数组来初始化vector对象,只需要指明要拷贝取余的首元素地址和尾后地址就行。
int arr[]={0,1,2,3,4,5};
vectorb(begin(arr),end(arr));
多维数组
多维数组本质上是数组的数组,按照由内而外的顺序阅读比类定义有助于更好地理解其真正含义。
多维数组的初始化
允许使用花括号括起来的值初始化多维数组。
初始化时并非所有元素的值都必须包含在初始化列表之内,其他未列出的元素执行默认初始化。
多位数组下标运用
可以使用下标运算符访问多维数组的元素,此时数组的每个维度对应一个下标运算符。
如果下标运算符和数组的维度一样多,该表达式的结果将是给定类型的元素,反之下标运算符数量小,表达式的结果将是给定索引初一个内层数组。
使用范围for语句处理多维数组
将外层循环的控制变量声明成引用类型,这是为了避免数组被自动转成指针。
NOTE:要使用范围for语句处理多维数组,除了最内层的循环外,其他所有循环的控制变量都应该是引用类型。