深蓝学院C++基础与深度解析笔记 第 3 章 数组、 vector 与字符串

第 3 章 数组、 vector 与字符串

一、数组

将一到多个相同类型的对象串连到一起,所组成的类型
int a → int b[10] b的类型是int[10];
A、 数组的初始化方式:
● 缺省初始化
● 聚合初始化( aggregate initialization )

 int b[3]  = {1, 2, 3};
 int b[3]  = {1, 2};
 int b[]   = {1, 23};

● 注意事项

  • 系统将会默认用0初始化未初始化的值
  • 不能使用 auto 来声明数组类型、
  • 数组不能复制,不能使用数组初始化数组
  • 元素个数必须是一个常量表达式(编译期可计算的值)
  • 字符串数组的特殊性,长度+1(’\n‘)
  • 数组长度不可变,需要大于0;

B、 数组的复杂声明

  • 指针数组与数组的指针
  • 声明数组的引用
  • 声明可以不给出长度
int* a[3];       // 有三个int指针的数组
int (*a)[3]      // 指向三个元素的数组的指针

int (&a)[3]      // 数组的引用  

不能定义引用的数组(这样做数组的元素将会称为对象别名,但是数组中的对象不能是别名 )

C、数组中的元素访问

  • 数组对象是一个左值
  • 使用时通常会转换成相应的指针类型
  • x[y] → *((x) + (y))
int a[3]={1,2,3};
std::cout << *(a + 1) << std::endl; 
std::cout << 1[a] << std::endl; 
 //输出都是 2 ,本质都是先转化成指针再解引用

小心数组上下界的溢出!!!

D、数组到指针的隐式转换

  • 使用数组对象时,通常情况下会产生数组到指针的隐式转换
  • 隐式转换会丢失一部分类型信息
  • 可以通过声明引用来避免隐式转换
  • 注意:不要使用 extern 指针来声明数组,长度可能需要更改, 类型信息也会被丢掉
  • Unknown Bounded Array 声明

● 获得指向数组开头与结尾的指针 : std::( c )begin, std::( c )endc: const
● 指针算数:

  • 增加、减少
  • 比较:只建议比较一个数组中的两个指针
  • 求距离:和指针类型相关
  • 解引用
  • 指针索引

● 求元素的个数

  • sizeof 方法,需要 / 类型 , 比较危险
  • std::size 方法
  • (c )end - (c )begin 方法,运行期获取的方法

● 元素遍历
– 基于元素个数
– 基于 (c )begin/(c )end
– 基于 range-based for 循环

E、 C 字符串
● C 字符串本质上也是数组
● C 语言提供了额外的函数来支持 C 字符串相关的操作 : strlen, strcmp…
'\n’为最后一个字符,表示结束

F、多维数组
● 本质:数组的数组,套娃!
– int a[3][4]:只能省略一个
● 多维数组的聚合初始化:一层大括号 V.S. 多层大括号
● 多维数组的索引与遍历

– 使用多个中括号来索引
– 使用多重循环来遍历:行遍历优于列遍历

● 指针与多维数组

– 多维数组可以隐式转换为指针,但只有最高维会进行转换,其它维度的信息会被保留,会丢掉最高位信息
– 使用类型别名来简化多维数组指针的声明
– 使用指针来遍历多维数组

未初始化的元素会被自动初始化为0
只有最后一层遍历时候可以省略 &

二、vector 序列容器

vector 是 C++ 标准库中定义的一个类模板
● 与内建数组相比,更侧重于易用性
可复制、可在运行期动态改变元素个数
性能降低
● 构造与初始化

  • 聚合初始化
  • 其它的初始化方式

● 其它方法

  • 获取元素个数size()、判断是否为空empty()
  • 插入push_back()、删除元素pop_back()
  • vector 的比较:每个元素挨个比较

● vector 中元素的索引与遍历:

  • [] V.S. at
  • ( c ) begin / ( c )end 函数 V.S. ( c )begin / ( c )end 方法

● 迭代器

  • 模拟指针的行为
  • 包含多种类别,每种类别支持的操作不同

● vector 对应随机访问迭代器
● 解引用与下标访问
● 移动
● 两个迭代器相减求距离
● 两个迭代器比较

● vector 相关的其它内容

  • 添加、删除元素可能使迭代器失效
  • 多维 vector
  • 从 . 到 -> 操作符:(*ptr). == ptr ->
  • vector 内部定义的类型
size_type
iterator / const_iterator

三、string

● string是 C++ 标准库中定义的一个类模板特化别名,用于内建字符串的代替品
● 与内建字符串相比,更侧重于易用性
– 可复制、可在运行期动态改变字符个数
● 构造与初始化 = 或者 ()
● 其它方法

- 尺寸相关方法( `size() / empty()` )
– 比较
– 赋值 ` = ` 
– 拼接 `+`
– 索引 :通过下标索引 `[ ]`
– 转换为 C 字符串:  `s.c_str();`返回char*指针。

在这里插入图片描述

你可能感兴趣的:(深蓝学院C++笔记,c++,笔记,算法)