读书笔记-effective STL

目录:
1.vector,string
2迭代器
3.关联容器
4.容器

自己补充的关于stl的一点内容
5.stl中的排序
6.删除stl容器元素的方法

1.vector,string

vector和string优先于使用数组

原因:vector和string是功能齐全的stl容器,支持的功能也比较齐全。

使用reserve来避免不必要的重新分配

原因:容器一般含有多余的空间,即size<=capicity的。有时候,当size==capicity的时候,当插入一个元素也会导致容器的扩容,当发生扩容时,对于该容器上所有指针和迭代器都会失效,为了保证当前操作的有效性和高效性,可以使用reserve动作来提前保证空间足够来支持插入动作。

注意string的实现的多样性

原因:几乎每个string的实现都会包涵如下信息:
1.字符串的大小,即包涵的字符的个数
2.用于存储该字符串中的字符的内存容量
3.字符串的值
此外,它还可能包涵它的分配子的一份拷贝,另外,建立在计数基础上的string实现可能还包括对值的引用计数。
实现A:
这里写图片描述

实现B:
这里写图片描述

实现C:
这里写图片描述

实现D:
这里写图片描述

使用swap技巧出去多余的容量

原因:当容器开始容量很大,有很多元素,但是后来元素被删除,导致size<

避免使用vector

原因:vector中存储的是bit位,而不是对象(优化了空间使用),但是导致使用时,取出来的东西不好用,最好使用bitset来存储,专门来存放bit的。

2迭代器

熟悉迭代器之间的相互转化,const_iterator,iterator,reverse_iterator,const_reverse_iterator

确保目标区间足够大

如果需要使用remove这类的算法,请在之后调用erase

了解那些算法需要使用排序的区间作为参数

确保判别式是一个“纯函数”

纯函数-它的结果只和输入有关,而与调用顺序、次数无关(即不需要用到成员变量子类的)

若一个类是函数子,则应使它可配接

继承相关的模版,如binary_function<….>,unary_function

理解ptr_fun,mem_fun,mem_fun_ref

参数格式化,mem_fun-调用成员函数,mem_fun_ref-使用指针调用成员函数,ptr_fun -将函数变成可配接的

了解排序相关的算法

partial_sort,sort,qsort,nth_elemetn,(非稳当的),stable_sort
ps:list的成员函数sort是稳定的排序

3.关联容器

为包含指针的关联容器指定比较器

默认的比较器比较的是指针的地址,而不是指针所指的东西。可以使用binary_function定义一个比较器,如:

struct Stringptrlesss : binary_function < const string*, const string*, bool >
{
        bool operator() (const string* q, const string* w){ return *q < *w; }

};
然后将该比较器设置为容器的比较器,如:set<string *, Stringptrlesss > ssp;

总是让比较函数在等值情况下返回false

一般情况下,如果比较函数在等值情况下返回true的话,导致容器无法正确的判等,容器的判等逻辑为:a不小于b,且b不小于a,即:!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值