C++ primer 5 chapter3 笔记

1 String

1)通过cin读入一个string时,会自动忽略开头的空白(空格,换行符,制表符等)并从第一个真正的字符开始读起,直至遇到下一处空白为止,结尾的空白不会被读入。

2)getline函数参数是一个输入流和一个string对象,它从给定的输入流中读入内容,直到遇到换行符为止(注意换行符也被读出了),然后将读出的内容保存到string对象中,换行符不会被保存。

3)string的size()方法返回的是size_type类型。

4)string队形和字符字面值以及字符串字面值混在一起做+时,必须确保每个+的两次的对象至少有一个是string

string s = s1+“,”//ok

string s2 = "hello" + "  "//error

string s3 = s1 +"  " +"."//ok

5)双引号包含的一串字符“abc”的字面值的类型不是string,而是数组类型。可以用一个字符串的字面值去初始化一个char数组,注意字符串是隐含‘\0’的,而string对象没有。

string s("abc");//这里结束符\0不会被保存到s中。

6)基于范围的for语句

for (declaration:expression)

    statement;

如果想在循环中修改序列中某个元素的值,需要将循环变量定义为引用类型。

2 vector

1)vector的元素类型不能是引用。

2)范围for内不能改变vector的大小

3 array
1)数组的元素类型不能是引用。
2)auto 数组名,返回的是指针类型,delctype(数组名)返回的则是数组类型

3)数组支持begin和end函数,分别返回数据头指针和尾后指针。
4)两个指针相加减,其结果是ptrdiff_t类型,结果可以是负数
5)指针如果指向数组,可以指向数组中的某个元素,然后对其进行下标操作,下标可以是负数的,负下标必须在数组边界内;否则结果不可预知。对于vector和string,则下标必须是无符号的。

  int intArray[1024];
    for (int i = 0, j = 0; i < 1024; i++)
    {
        intArray[i] = j++;
    }
 
    cout << intArray[512] << endl;   // 512
 
    int *midArray = &intArray[512];  // 指向了数组中间的数据
 
    cout << midArray[-256] << endl;  // 256,这里是负下标,其实就是将当前指针前移
 
    cout << intArray[-256] << endl;  // 这里当前指针前移后,范围不在数组范围内,得到不可预知的结果

6)多维数组采用auto,for进行遍历时,除了最内层控制变量外,其他各层控制变量应该用引用类型。
for(auto &i:a)
for(auto j:i)

如果想修改数组的元素,则所有的循环的控制变量都应该是引用类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值