读书笔记:C++ primer 5th edition--chapter 3.字符串,向量,数组

part1.String
1.头文件不要包含using,因为头文件内容会被拷贝到所有引用它的文件中去。容易导致冲突。
2.string s4(10, ‘c’) => cccccccccc 初始化10个c的string
3.函数:s.empty()     s.size()
4.string对象会自动忽略开头的空白(空格符,换行符,制表符)
5.使用c++版本的C标准库(cstdio rather than stdio.h)
6.使用基于范围的for语句:
string str("some string")
for (auto c : str)
     cout << c << endl;
for (auto &c : str)     //变量被依次绑定到序列的每个元素上,可以改变值
     c = toupper(c)
//字符函数:isalnum(c)  //是否为字母或者数字
                    isalpha(c),isdigit(c)
                    isspace(c) //空白时为真(空格,制表符,回车,换行)

part2.Vector
1.vector是模板而非类型
2.c++11之前要求外层vector右尖括号有空格:vector<vector<int> >,但现在不用了
3.不存在包含引用的vector
4.初始化:
vector<T> v3(n, val);//n个值为val的元素,如不提供,则对于内置类型如int,默认为0
vector<T> v4{a, b, c, ..}; // <=>  vector<T> v5 = {a, b, c, ..}; 注意不是小括号()
一般来说:
vector<int> v3(10, 1)//10个元素,值为1
vector<int> v4{10, 1}//列表初始化,2个元素
但是用了花括号但是提供的值不能用来列表初始化,则:
vector<string> v6(“hi”);//错误,字面值无法构建vector对象
vector<string> v7{10}; //10个默认初始化的元素
vector<string> v8{10, “hi”};//10个值为“hi”的元素
5.vector对象能高效增长,所以除了所有元素值都一样时,其他情况下不用设定其大小
6.范围for循环内部不能包含向vector添加元素或则改变容量的语句

part3.Iterator
1.end成员函数返回的是尾后迭代器,不指向某个元素,因此无法对其自加或者解引用
2.优选迭代器而非下标。以及==/!=,这种风格在标准库提供的所有容器上都有效
3.解引用和成员访问,引出箭头运算符
(*it).mem  <=> it->mem
4.所有标准库容器都有支持递增运算的迭代器。但是:
vector和string迭代器支持的运算:
iter +- n
iter += n
iter1 - iter2 //两个的距离
//迭代器版本的二分搜索

part4.Array
1.不能将数组的内容拷贝给其他数组作为初始值,也不能用数组为其他数组赋值。
2.为了更简单实用指针,c++11引入begin和end函数,int *beg = begin(arraA),int *last = end(arraA)//相当于尾后。
可以用于初始化vector
vector < int > ivec(begin(int_arr), end(int_arra) )//与原数组次序和值一直
3.下标运算可以处理负数。相当于前移(不超过起始位置,到尾后位置)
4.实用范围for语句处理多维数组,除了最内层的循环外,其他所有循环的控制变量都应该是引用类型:
for ( auto &row : ia)
     for (auto col : row)
          cout << col << endl;
5.简洁访问二维数组(不用care下标,也就是维度):
for (auto p = begin(ia); p != end(id); ++p) {
     for(auto q = begin(*p); q != end(*p); ++p)
          cout << *q << ‘ ‘ ;
     cout << endl;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值