第三章:字符串、向量和数组

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初始化

stringvector
strvec
str(str1)vec(vec1)
str=str1vec=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声明,因为使用了该头文件的文件都会使用该声明,可能会不经意间包含一些名字,造成名字冲突

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值