您的位置:首页 > 编程语言 > C语言/C++

C++primer 第三章笔记 初稿

2017-03-01 21:20 274 查看

3.1命名空间的using声明

作为一个好的设计,在头文件中应减少using声明;


3.2 string类型

读取未知数量的string对象常使用while循环;

范围for(引用符)结合cctype中的头文件,对字符串进行处理;

利用decltype(s.size()) 简化定义过程;

将size()函数值赋值给一个int型变量,实际上进行了隐式转换,因为size()返回值是无符号类型(小心溢出!)。

无论是string还是其他泛型编程,都应该多用!=判断是否越界,因为并非所有模板都重载了<运算符。

3.3 迭代器

什么是迭代器

有时又称游标;

可在容器上遍访的接口;

提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示;

分离了容器与算法

const迭代器

是底层const

通过cbegin(),cend()可以轻松获取;

任何改变容器的操作,都有可能改变迭代器,故应当重复调用获取迭代器函数而不是把它当做变量保存。

迭代器相减返回类型是difference_type,为带符号整型

3.4 数组

数组下标一般为size_t类型;

使用数组名为auto参数时,类型为数组类型的指针,而decltype为数组类型;

通过自带的begin()和end()函数可获取首尾指针;

指针的差为ptrdiff_t类型,为带符号整型;

可以用字符数组初始化string类对象,反之不行

char s1[3]={'a','v','c'};

char s2[]="avc";

char *s3=s1;


没有多维数组,只有数组的数组,层数阅读由内到外;

下述代码不能通过,因为类型不匹配

for (auto row : matrix)

for (auto col : row)


应该改为

for (auto &row : matrix)

for (auto col : row)


可以使用类型别名简化

using int_array = int [4]

int ia[3][4];

for(int_array *p = ia; p!=ia+3; ++p)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: