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

读书笔记:C++ primer 5th edition--chapter9.顺序容器

2016-10-07 21:35 288 查看
part1.概述
1.类型:vector,deque,list,forward_list,array,string
2.与内置数组类似,array对象大小固定,不支持添加删除。
3.forward_list为了保证性能,不提供size操作
4.一般用vector
5.如果程序只在读写时需要再中间插入,随后需要随机访问元素,则
1)为了避免在中间插入,可以通过用vector添加,并用sort排序
2)也可以考虑输入阶段使用list,输入完成之后使用将list拷贝到vector中。
6.如果不确定如何选择,可以使用vector和list公共的操作:使用迭代器,不适用下标,避免随机访问。必要时就可以切换二者

part2.容器库概览
1.迭代器的范围概念是标准库的基础
2.demo:
while(begin != end){
*begin = val;
++begin;
}
3.为了创建一个容器为另一个容器的拷贝,两个容器的类型和元素类型必须匹配。但是如果传递迭代器参数来拷贝一个范围,此时不要求容器类型相同,元素类型也可以不同,只要可以转换就行。char * to string
4.只有顺序容器的构造函数才接受大小参数,关联容器不支持。
5.由于小大是array类型的一部分,其不支持普通的容器构造函数。默认构造的array是非空的,包含了与其大小一样多的元素,且被默认初始化。array支持拷贝或者对象赋值。与内置数组类型不同。
6.swap两个array会真正交换他们的元素,时间与元素数量成正比。而对于其他类型,swap不会操作元素,只是交换两个容器的内部数据结构,可以在常熟时间内完成。
7.统一使用非成员版本的swap??

part3.容器操作
1.在容器中访问元素的成员函数(front,back,下标和at),返回的都是引用。
2.为了确保下标是合法的,可以使用at
3.forward_list,提供首前迭代器。
4.向容器添加元素后:
vector ,string,deque,迭代器会失效或者部分失效
list,forward_list仍然有效
5.当删除一个元素后:
list, forward_list,仍然有效
vector,string ,指向被删除元素之前的迭代器有效。尾后总是会失效。
6.不要保存end返回的迭代器。而是每次更新。while(being != v.end() ) {... }

part4.vector增长方式
1.vector元素必须连续存储,因此存满了就要将已有元素从旧位置移动到新的空间,然后添加新元素。为了减少空间重新分配的次数。不得不获取新空间时,会分配比新的空间需求更大的内存空间。
2.capacity()表示不重新分配的话,还可以保留多少元素。reserve(n),分配n的空间。shrink_to_fit(),减少capacity与size相同。

part5.string操作
1.从const char * 创建string时,指针指向的数组必须以空字符结尾,拷贝以此结束。如果还传递给构造函数一个计数值,那么数组可以不必以空字符结尾。如果二者都不满足,那么函数行为未定义。
2.可以看出只要给定计数值,则各种拷贝只进行到结尾,不会更多。
3.寻找给定字符串中第一个数字:
usage:
string number(“0123456789”),name(“r2d2”);
auto pos = name.find_first_of( number );
4.数值转换,要转换为数值的string中第一个非空白字符必须是数值中可能出现的字符。
usage:
string s2 = “pi = 3.14”;
d = stod ( s2.substr( s2.find_first_of(“+-.0123456789” ) ) );

part6.适配器 //need more practice
1.标准库的通用概念
2.是一种机制,一个容器适配器接受一种已有的容器类型,使其行为看起来像一种不同的类型。
3.常用的有栈适配器,队列适配器
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++