vector<int> a(7,3);//7个3
vector v={1,1,2,3,3,1};
for(auto &r:v)//范围变量必须是引用类型,这样才能对元素执行写操作
//对于v中的每一个元素
r*=2;
不能通过范围for语句增加vector对象(或其他容器)的元素
在范围for语句中 预存了end()的值 一旦在序列中添加(删除)元素 end函数的值就可能无效
static 局部静态变量
函数声明不需函数体用分号代替 声明中形参名字非必需
p188指针形参p199blabla
引用类型的初始值必须是一个对象 类型且必须与其引用对象一致
除了2个
其一 在初始化常量时可以 eg:允许将一个const int 绑定到一个普通int对象上
5.30
传递数组参数
使用标准库规范
传递数组首元素和尾后元素的指针void print(const int *beg ,const int *end)
只有当函数确实要改变元素值的时候 才把形参定义成指向非常量的指针
数组引用形参
void print(int (&arr)[10])
&arr 两端的括号必不可少
多维数组
void print(int (*matrix)[10],int rowSize)//含有10个整数的数组的指针
括号不能少哦
main函数参数:使用实参时 可选的实参从[1]开始 [0]是文件名
initializer_list
initializer_list ls;初始化 .size()begin end和vector类似
和vector不一样的是 initializer_list对象中的元素永远是常量值 我们无法改变对象中元素的值
5.31
调用一个返回引用的函数得到左值 其他返回类型得到右值
get_val(s,0)=‘a’;
如果返回值是常量引用 我们不能给调用的结果赋值
using arr=int [10];
typedef int arr[10];
int arr[10];//arr是一个含有10个整数的数组
int *p1[10];//p1是一个含有10指针的数组
int (*p2)[10];//p2是一个指针 它指向含有10个整数的数组
int (*func(int i))[10]
auto func(int i)->int(*)[10];
decltype(odd) *arrPtr(int i);
Record lookup(const Account&)//省略了形参名字