1.使用"="初始化时会调用拷贝构造函数
2.getline(流,str)读取行
3.string::size_type与负值相比永远小,因为负数会转换为无符号数
4.“hello”+“world” 字面值不能直接相加
5.for(auto v:vars) {/…/} 不会改变原值
for(auto &v:vars){/…/} 可以改变原值
6.vector< T >为类模板,T非引用,引用不是对象
7.string与vector初始化
string | vector |
---|---|
str | vec |
str(str1) | vec(vec1) |
str=str1 | vec=vec1 |
str(10,‘c’) | vec(n,val) |
str(“hello”) | vec{v1,v2…} |
str=“hello” | vec={v1,v2…} |
vec(n) :n个类型的值初始化,int为0 | |
vec(b,e) |
8.不能直接访问vector还不存在的下标元素
9.why"!=",因为所有迭代器都定义了==和!=,但大部分都没有定义<
10.迭代器类型
- vector< T > ::iterator
- vector< T >::const_iterator 只读
11.vector的动态容量变化,会使迭代器失效
12.迭代器无加法
13.数组初始化大小。arr[]可以为常量表达式或者constexpr函数返回值
const unsigned sz = 3;
int a0[3] = {1, 2, 3};
int a1[sz] = {1, 2, 3};
int a2[] = {1, 2, 3};
14.数组不允许拷贝和赋值 arr1=arr2
int a0[3] = {1, 2, 3};
int a1[] = a0; //错误,不允许使用一个数组初始化另一个数组
a1 = a0; //错误,不允许一个数组赋值给另一个数组
15.数组
- 数组名的值是一个指向特定类型的指针常量
- 除了优先级不同之外,下标引用操作符和间接访问表达式是等价的
- 很多用到数组名的地方会转换为指向第一个元素的指针(decltype,sizeof除外)
- decltype会将数组名推断为相应的数组
- sizeof会得到整个数组所占空间的大小
- 要使用范围for语句处理多维数组,除了最内层的循环外,其他所有循环的控制变量都应该是引用类型
int ia[] = {1, 2, 3};
auto iap(ia); //int*
decltype(ia) ia1 = {1, 2, 4}; //数组类型
16.s.c_str()返回c风格字符串,一个指向字符数组首地址的const char*
17.用数组初始化vector
vector<T> vec(begin(arr),end(arr));
18.using声明
头文件不应该包含using声明,因为使用了该头文件的文件都会使用该声明,可能会不经意间包含一些名字,造成名字冲突