《C++ Primer》 读书笔记第3章——字符串、vector、迭代器和数组

原创 2018年04月17日 00:11:43
string:
★不要在头文件中使用using namespace std
★getline中不会存入换行符,但会在遇到换行符结束
★string的size()函数返回值是size_type类型,无符号的
所以如果size()<-5, 则-5被转换成无符号,则是一个很大的数字
★“abc”+"def"是错的, string类型的 s + “def”是对的
★cctype头文件中有一堆函数,能够判断一个字符是什么,这样判断大写时,不需要自己写什么>=A && <=Z这么麻烦的判断,    is__
★范围for , 即 for(变量: 序列),  则变量就是改序列中的每1个, 这样想遍历string时,只需要 for(auto c:str)即可遍历str
若要修改str中的东西,则用for(auto &c:str),这样c就能改变str中的东西了


vector:
★实例化:根据模板来创建类或函数
★vector的初始化:
vector<int >v1{1,2,3}  (列表初始化,也可以加个等号)
vector<int> v2(n,data)
                     v3(v2)
当vector<int> v(10)时,则构建10个int,且进行“值初始化”。 int会被初始化为0
用数组初始化vector:  vector<int>  v(begin(num), end(num));
也可以是  vector<int>  v(num+1,  num+3),,  则初始化为num[1]到num[2]
如果有些类的构造函数有参数,则这种初始化方式是错误的。
★vector<string>  v{10},  注意10不是字符串, 则此时等同于vector<string> v(10)
★vector<int>::size_type是对的, vector::size_type是错的,因为vector必须实例化才有效


迭代器:
★迭代器v.end()指向的是v尾元素的下一个位置
★有时候迭代器类型写不来,那么就 auto it = v.begin()即可
★只读迭代器:  vector<int>::const_iterator it3,  则it3只能读,不能写
什么时候v.begin()会返回只读迭代器?
即定义了const vector<int> v 的时候
★ 想要调用it迭代器里的函数,应该是(*it).func(), 而不是*it.func()
想要简化的话,那就用 it->func()
★凡是使用了迭代器的循环体,都不要往其中添加元素:
    例如你用for循环,里面有v.begin和v.end,你如果执行了v.push_back,那么就GG了
★迭代器之间的 大小比较,所比较的是他们的位置。
迭代器相减, 得到的是距离,其类型时difference_type
获得中间元素:  auto mid = v.begin() + (v.end()-v.begin())/2 , 可用于二分


数组
★什么时候数组初始化时,其纬度可以用变量? 例如int num[numsize]??
那么numsize必须是常量表达式,即constexpr
★数组类型不可以用auto。
★初始化列表可以小于维度,则剩余的元素被初始化为默认值
但其列表不可以大于维度
★char a4[3]="abc"是错误的,因为还有一个'\0'
★ int &refs[10] = arr是错的,没有引用的数组
但是可以 int (&refs)[10] = arr, 则refs引用一个10个元素的数组
类似于  int (*refs)[10] = arr,  refs是指针,指向10个元素的arr
int *(&refs)[10] = parr,  则refs是数组的引用, 这个数组含有10个指针,就像 int (&refs)*[10]
★数组也可以用范围for, 即for(auto i : scores)
★decltype(某数组),  则类型是相同数量的数组,而非指针
★C++11引入了begin函数和end函数, 可以有
*startp = begin(数组)
*endp = end(数组)  则得到对应的指针
但是切记,尾后指针不能拿来解引用或者递增

指针:
★指针相减,得到的类型时ptrdiff_t
★指针的[]下标可以为负,  即 int *p = &a[2],  则可以有p[-2]表示a[0]
★string的c_str()功能不稳定,如果s变化它返回的指针也会变化。 最好用const char *str = s.c_str() ,或者重新拷贝一下再赋值给str

多维数组:
★多维数组的范围for要注意,   
for(auto  row : ia)
  for(auto col:row)  是错的, 因为row:ia时,row将变成指针,则第二层循环就错了
应该写成   for(auto &row:ia)
                    for(auto col:row),   则row一定是数组

★ia是二维数组,
则for(auto p = ia; p != ia+3; p++),//这里的p是一个指针,指向一维数组 
     for(auto q = (*p);q!=*p+4;q++)   //这里要注意!  不是*(p+4)而是*p+4, 即*p是第一个一维数组首地址,+4则是该数组的末地址

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a799581229/article/details/79968801

【读书笔记:C++ primer plus 第六版 中文版】第2章:开始学习C++

转载请注明出处: 本章内容包括: 创建C++程序. C++程序的一般格式. #include编译指令. main()函数. 使用cout对象进行输出 在C++程序中加入注释. 何时以及如何使用endl...
  • enyusmile
  • enyusmile
  • 2015-06-21 10:33:59
  • 910

《C++primer(第五版)》学习之路-第三章:字符串、向量和数组

【 声明:版权所有,转载请标明出处,请勿用于商业用途。  联系信箱:libin493073668@sina.com】 3.1 命名空间using声明 1.有了using声明就无须专门的前缀(形...
  • libin1105
  • libin1105
  • 2015-09-04 16:38:35
  • 670

【读书笔记:C++ primer plus 第六版 中文版】第3章:数据处理

转载请注明出处: 本章内容包括: C++变量的命名规则. C++内置的整型 unsigned long,long,unsigned int,int,unsigned short,short,char,...
  • enyusmile
  • enyusmile
  • 2015-06-21 11:07:31
  • 694

c++ Primer Plus(第六版)第十二章习题,写代码之路

c++ Primer Plus(习题12.1) //12.1头文件 #pragma once #ifndef COW_H #define COW_H #include #include class ...
  • Robot_x
  • Robot_x
  • 2017-01-20 13:01:53
  • 639

C++ Primer Plus第六版 第十四章 编程练习答案

这章有点难的= =。。。那个虚MI和模板把我看的有点晕QAQ //main.cpp #include #include "winec.h" int main() { using std::cin...
  • zhaoshu01234
  • zhaoshu01234
  • 2015-12-05 13:52:39
  • 1700

C++_Primer_Plus_第6版中文版第13章源代码

  • 2015年06月23日 22:52
  • 10KB
  • 下载

c++primer(第五版) 第十二章 动态内存习题答案

纯原创    转载请注明出处:http://blog.csdn.net/axuan_k 12.1  12.2  12.3  12.4  12.5 #include #include #incl...
  • AXuan_K
  • AXuan_K
  • 2016-03-11 17:13:15
  • 1317

c++ primer plus第六版源码课后答案和书中勘误

  • 2015年07月12日 12:22
  • 2.63MB
  • 下载

《C++ Primer Plus(第六版)》(27)(第十三章 类继承 编程题答案)

题目都比较简单,如果有工作经验的话。主要是对类继承之后,复制构造函数,赋值运算符的处理等东西。 13.11 编程练习 1.以下面的类声明为基础: class Cd { private: ...
  • u012175089
  • u012175089
  • 2016-12-28 11:38:01
  • 2569

c++ primer plus 第13章习题

//第13章 13.14 #ifndef STACK_H #define STACK_H #include using std::ostream; using std::istream; class...
  • chinahnwqf
  • chinahnwqf
  • 2016-05-20 14:59:32
  • 281
收藏助手
不良信息举报
您举报文章:《C++ Primer》 读书笔记第3章——字符串、vector、迭代器和数组
举报原因:
原因补充:

(最多只允许输入30个字)