1. 数组
- 概念
- 是一组元素
- 这些元素是相同的数据类型
- 按顺序存储到内存中
- 目的是避免在业务需要时去重复声明很多同类型的变量
- 初始化
- 分别初始化:int i [5] = {1,2,3,4,5};
- 全部初始化:int i [5] = {}; 或 int i [5] = {0};
- 部分初始化:int i [5] = {1,2};
- 长度参数可以也只可以用常量
- 如果知道每个元素的初始值,可以不指定数组包好的元素数,传几个就是多长:int i [] = {1,2};
- 访问和修改元素数据
- 索引从0开始访问数组元素:i[0]
- 虽然索引可以达到甚至超过数组长度,但取回的值就不确定是什么了,有安全和稳定性的风险,甚至会崩溃,所以要避免。
- 多维数组
- C++的多维数组其实只是模拟,本质还是单向的一维顺序存储
- 初始化时可以以多维的形式,也可以一维的形式:int i[2][2] = {{1,2},{3,4}}; 或 int i[2][2] = {1,2,3,4};
- 最好以循环的方式访问和操作多维数组,代码更多且不易出错
- 动态数组
- 不像静态数组那样提前预留了很多内存空间
- std::vector
- #include
- vector
dynArray (3); dynArray[2] = 1; dynArray.push_back(0); - push_back将数字插入到数组末尾,这个矢量动态地调整其长度,以存储更多数据。
- 矢量、模板
- #include
- 一定要初始化变量和数组,否则它将包含最后一次存储在相应内存单元中的值。
2. 字符串
- C风格字符串
- 是特殊的字符数组
- 以' '结尾,编译器会帮忙给字符串字面量结尾加上' ',' '是一个字符,表示空,即让编译器插入空字符或零
- 如果字符数组包含多个' ',那么当成字符串使用时,会被截断。但数组长度没有变,sizeof的结果还是完成的长度
- 使用C风格的字符串来存储用户输入很不安全,用户可能输入比数组长度更长的字符串。
- 很危险,比如cout使用字符数组,如果忘了加' ',会多打印垃圾字符。某些情况下甚至导致程序崩溃。strcpy、strcat、strlen也是这样
- 浪费一个字符,考虑限制长度时容易忘记考虑
- C++字符串
- 更高效、更安全
- 是动态的,容量自动增大
- #include
- .length()
- 自动初始化为默认值
- cout将不断读取字符,直到终止空字符。因此变量空间要足够。
- 可用于cout语句的换行