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

C++primer 第五版 *笔记二 [渣渣进化记]

2015-01-24 16:58 211 查看
【第三章】字符串、向量、数组

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:使用很危险……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: