C++primer 第五版 *笔记二 [渣渣进化记]
2015-01-24 16:58
211 查看
【第三章】字符串、向量、数组
1、标准库类型string
初始化:(两种之前不熟悉的方式) 直接初始化。拷贝初始化是使用 =
string 的操作
·读取string对象 从第一个真正的字符读取,遇到空白就停止
·string 的size操作 size()函数 返回的类型是string::size_type,是无符号整型数,所以表达式中有了size()函数就不要用int了,避免混用int和unsigned可能带来的问题
·字面值和string对象相加,+两侧至少一个是string
(注意运算的顺序)
二、vector
初始化vector<int>时 圆括号 和 花括号
初始化vector<string>时
·向vector对象中添加元素
先创建一个空的vector在利用vector的成员函数push_back()添加元素
vector的下标运算符可访问已经存在的元素,但不能用于添加元素
三、迭代器
·迭代器成员:如果容器为空,begin 和 end返回同一个迭代器
begin() 返回指向第一个元素
end() 尾元素下一个位置(不能对end进行递增和递减,因为不实际指向某个元素)
·迭代器类型:
iterator 读写
const_iterator 只读
begin 和 end 返回的类型由对象是否是常量决定
新标准引入两个新函数,为便于专门得到const_iterator类型的返回值: cbegin 和 cend
·两个迭代器指向的是同一容器的元素或者尾元素的下一位置,则相减后的其距离,类型名为difference_type
四、数组
·字符串数组,注意结尾有1个位置存放空字符串,显示空字符串为 \0
·理解复杂数组从内往外
·使用数组下标时,定义为size_t类型
·两个指针相减结果也是其距离,结果类型为 ptrdiff_t
(数组这坨还算比较清楚一点,跳的就比较快了,真心感觉看不完呢…
…加速加速!刚看了下目录,到八章开始对我来说都是些全新的东西,那坨才该是细看的,还剩4章火速看了!!)
【第四章】表达式
·使用++i --i 而不用 i++ i--的原因 :
前置版本把值加1后直接返回改变了的运算对象
后置版本需要将原始值存储下来以便于返回这个未修改的内容
·显式转换 命名的去强制类型转换
cast-name<type>(expression)
type:转换目标的类型
expression:要转换的值
cast-name:
·static_cast:任何有明确定义的类型转换,只要不包含底层const,都可以用
对编译器无法自动执行的类型转换也非常有用,如void*指针
·dynamic_cast:支持运行时类型识别
·const_cast:只能改变底层const,可将常量对象转换为非常量(去掉const性质)
若对象本身不是常量,则强制类型转换获得写权限 合法
若对象是常量,则用const_cast 执行写操作会产生未定义后果
·reinterpret_cast:使用很危险……
1、标准库类型string
初始化:(两种之前不熟悉的方式) 直接初始化。拷贝初始化是使用 =
string s1("value") ; string s2(n, 'c');
string 的操作
getline(is, s) //从is中读取一行给s s.empty() //s为空返回true s.size() //返回s中字符的个数
·读取string对象 从第一个真正的字符读取,遇到空白就停止
·string 的size操作 size()函数 返回的类型是string::size_type,是无符号整型数,所以表达式中有了size()函数就不要用int了,避免混用int和unsigned可能带来的问题
·字面值和string对象相加,+两侧至少一个是string
string s4 = s1 + ", "; //正确 string s5 = "hello" + ", ";//错 string s6 = s1 + ", " + "wold";//正确 string s7 = "hello" + ", " + s2;//错误
(注意运算的顺序)
二、vector
初始化vector<int>时 圆括号 和 花括号
vector<int> v1(10);// v1有10个元素,值为0 vector<int> v2{10};//v2有1个元素,值为10
初始化vector<string>时
vector<string> v3{10};//v3有10个默认初始化元素 vector<string> v4{10, "hi"};//v4有10个值为hi的元素
·向vector对象中添加元素
先创建一个空的vector在利用vector的成员函数push_back()添加元素
vector的下标运算符可访问已经存在的元素,但不能用于添加元素
三、迭代器
·迭代器成员:如果容器为空,begin 和 end返回同一个迭代器
begin() 返回指向第一个元素
end() 尾元素下一个位置(不能对end进行递增和递减,因为不实际指向某个元素)
·迭代器类型:
iterator 读写
const_iterator 只读
begin 和 end 返回的类型由对象是否是常量决定
新标准引入两个新函数,为便于专门得到const_iterator类型的返回值: cbegin 和 cend
·两个迭代器指向的是同一容器的元素或者尾元素的下一位置,则相减后的其距离,类型名为difference_type
四、数组
·字符串数组,注意结尾有1个位置存放空字符串,显示空字符串为 \0
·理解复杂数组从内往外
·使用数组下标时,定义为size_t类型
·两个指针相减结果也是其距离,结果类型为 ptrdiff_t
(数组这坨还算比较清楚一点,跳的就比较快了,真心感觉看不完呢…
…加速加速!刚看了下目录,到八章开始对我来说都是些全新的东西,那坨才该是细看的,还剩4章火速看了!!)
【第四章】表达式
·使用++i --i 而不用 i++ i--的原因 :
前置版本把值加1后直接返回改变了的运算对象
后置版本需要将原始值存储下来以便于返回这个未修改的内容
·显式转换 命名的去强制类型转换
cast-name<type>(expression)
type:转换目标的类型
expression:要转换的值
cast-name:
·static_cast:任何有明确定义的类型转换,只要不包含底层const,都可以用
对编译器无法自动执行的类型转换也非常有用,如void*指针
·dynamic_cast:支持运行时类型识别
·const_cast:只能改变底层const,可将常量对象转换为非常量(去掉const性质)
若对象本身不是常量,则强制类型转换获得写权限 合法
若对象是常量,则用const_cast 执行写操作会产生未定义后果
·reinterpret_cast:使用很危险……
相关文章推荐
- C++primer 第五版 *笔记三 [渣渣进化记]
- C++primer 第五版 *笔记一 [渣渣进化记]
- C++Primer第五版【学习笔记】——第三章 Strings,Vectors,Arrays
- C++Primer第五版【笔记】——第七章 类
- C++primer第五版笔记-第十六章模板与泛型编程
- C++primer第五版第三章学习笔记
- C++primer第五版第一章学习笔记
- C++Primer第五版【学习笔记】——第二章 变量和类型
- C++primer第五版第七章学习笔记
- C++primer第五版笔记-第十四章重载运算与类型转换
- C++primer第五版笔记-第十三章拷贝控制
- C++primer第五版第五章学习笔记
- C++Primer第五版【笔记】——第八章 IO库
- C++Primer第五版【学习笔记】——第二章 变量和类型
- C++primer第五版笔记-第十五章面向对象程序设计
- C++primer第五版笔记-第九章顺序容器
- C++Primer第五版【笔记】——第六章 函数
- 《C++primer》第五版 第四章 第五章 笔记
- C++primer第五版笔记-第十八章用于大型程序的工具
- C++primer第五版第六章学习笔记