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


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.常用的有栈适配器,队列适配器 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值