随笔分类 -  STL

摘要:STL 头文件中都有什么,这里有一个快速概要: 1. 几乎所有的容器都在同名的头文件里,比如,vector 在<vector> 中声明,list 在 <list> 中声明等。例外的是<set>声明了set 和 multiset,<map> 声明了 map 和 multimap 2. 除了四个算法外, 阅读全文
posted @ 2018-12-02 21:26 KidyCharon 阅读(203) 评论(0) 推荐(0)
摘要:假设有一个 vector<int>,想要去掉 vector 中的值小于 x 而出现在至少和 y 一样大的最后一个元素之后的所有元素 可以使用的方法: 找到 vector 中一个值最后一次出现需要用逆向迭代器调用 find 或 find_if 的某种形式 去掉元素需要使用 erase 或 erase- 阅读全文
posted @ 2018-12-02 21:20 KidyCharon 阅读(156) 评论(0) 推荐(0)
摘要:STL 函数对象——化妆成函数的对象——传递给算法所产生的代码比一般传递真的函数高效 假设需要以降序排序一个 double 的 vector,最直接的 STL 方式是通过 sort 算法和 greater<double> 类型的函数对象: 避开函数对象而使用真的函数,一个真的内联函数: 其中,gre 阅读全文
posted @ 2018-12-02 20:54 KidyCharon 阅读(159) 评论(0) 推荐(0)
摘要:如果区间有序,可以使用对数时间的算法,binary_search、lower_bound、upper_bound 和 equal_range 如果迭代器没有划分一个有序区间,只能用线性时间的算法 count、count_if、find 和 find_if cout 回答: 是否存在这个值,如果有,那 阅读全文
posted @ 2018-12-02 14:48 KidyCharon 阅读(437) 评论(0) 推荐(0)
摘要:有些容器拥有和 STL 算法同名的成员函数。 关联容器提供了 count、find、lower_bound、upper_bound 和 euqal_range list 提供了 remove、remove_if、unique、merge 和 reverse 大多数时候应该用成员函数代替手写算法,这样 阅读全文
posted @ 2018-12-02 11:02 KidyCharon 阅读(184) 评论(0) 推荐(0)
摘要:每一个算法接受至少一对用来指示将被操作对象区间的迭代器,比如,min_element 可以找出此区间中的最小的值,而 accumulate 则对区间内的元素作某种形式的整体求和运算,partition 将区间内的元素分割为满足和不满足某某判决条件的两个部分。算法执行时,他们进行检查指示给它的区间中的 阅读全文
posted @ 2018-12-02 10:28 KidyCharon 阅读(262) 评论(0) 推荐(0)
摘要:总结由容器、迭代器、算法和函数对象组成的 STL 是个惯例 运用 STL 编程要知道什么时候使用循环,什么时候使用算法,什么时候使用容器成员函数 要知道 equal_range 什么时候是比 lower_bound 更好的搜索方式 知道 lower_bound 什么时候比 find 更优越,知道 f 阅读全文
posted @ 2018-11-30 18:58 KidyCharon 阅读(364) 评论(0) 推荐(0)
摘要:假设有一个 Widget* 指针和 list 和一个函数来决定指针是否确定一个有趣的 Widget: 找到第一个有趣的 Widget : 找到第一个不有趣的 Widget: 取而代之,必须对 isInteresting 应用 ptr_fun 在应用 not1 之前: ptr_fun做的唯一的事情是使 阅读全文
posted @ 2018-11-30 16:32 KidyCharon 阅读(148) 评论(0) 推荐(0)
摘要:1. 判断式是返回 bool (或者其他隐式转换为 bool 的东西)。判断式在 STL 中广泛使用。标准关联容器的比较函数是判断式,判断式函数常常作为参数传给算法,比如 find_if 和多种排序算法。 2. 纯函数是返回值只依赖于参数的函数。如果 f 是一个纯函数, x 和 y 是对象, f(x 阅读全文
posted @ 2018-11-30 14:37 KidyCharon 阅读(154) 评论(0) 推荐(0)
摘要:C 和 C++ 都不允许把真的函数作为参数传递给其他函数。取而代之,你必须传递指针给函数比如: 作为 cmpfcn 传递的实参是一个指向函数的指针,是从调用端拷贝给 qsort(值传递)。 C和C++标准库都遵循的一般准则: 函数指针是值传递 STL函数对象在函数指针之后成型,所以STL中的习惯是当 阅读全文
posted @ 2018-11-30 14:03 KidyCharon 阅读(167) 评论(0) 推荐(0)
摘要:有时候需要把整个区间提炼成一个单独的数,比如: count 告诉你区间中有多少等于某个值的元素,而 count_if 告诉你有多少元素满足一个判断式 区间中的最小和最大值可以通过 min_element 和 max_element 获得 accumulate 提供了更加灵活的算法,但需要自己定义判断 阅读全文
posted @ 2018-11-30 11:16 KidyCharon 阅读(278) 评论(0) 推荐(0)
摘要:STL 提供了 11 个名字带有 “copy” 的算法 copy copy_backward replace_copy reverse_copy replace_copy_if unique_copy remove_copy rotate_copy remove_copy_if partial_so 阅读全文
posted @ 2018-11-30 10:13 KidyCharon 阅读(291) 评论(0) 推荐(0)
摘要:怎么用 STL 进行忽略大小写的字符串的比较? 首先实现两个字符忽略大小写的比较: 基于 mismatch 算法,确定两个区间中第一个对应的不相同的值的位置 第二种方法 ciStringCompare 是产生一个合适的 STL 判断式:可以在关联容器中用作比较函数的函数,应用STL中名字第二长的算法 阅读全文
posted @ 2018-11-30 09:39 KidyCharon 阅读(223) 评论(0) 推荐(0)
摘要:不是所有的算法可以用于任意区间,比如: 1. remove 需要前向迭代器和可以通过这些迭代器赋值能力,所以不能应用于输入迭代器的划分区间,也不能是 map 或 multimap,也不能是 set 和 multiset 的一些实现。 2. 很多排序算法需要随机访问迭代器,所以不能在一个 list ( 阅读全文
posted @ 2018-11-29 19:44 KidyCharon 阅读(123) 评论(0) 推荐(0)
摘要:提防在指针的容器上使用类似 remove 的算法,容易造成内存泄漏。 选择处理动态分配指针的容器: 通过引用计数的智能指针 在调用类似 remove 的算法之前手动删除和废弃指针等 阅读全文
posted @ 2018-11-29 18:24 KidyCharon 阅读(105) 评论(0) 推荐(0)
摘要:remove 的声明: remove 接收指定它操作的元素区间的一对迭代器,不接收一个容器,所以不知道作用与哪个容器 remove 并不 “真的” 删除东西,因为它做不到 从容器中除去一个元素,唯一的方法是调用那个容器的一个成员函数,几乎都是 erase 的某种形式 remove 移动指定区间中的元 阅读全文
posted @ 2018-11-29 17:49 KidyCharon 阅读(259) 评论(0) 推荐(0)
摘要:排序出 20 个质量最高的 Widget,一种算法叫作 partial_sort: 选出任意 20 个质量最好的 widget(不排序),使用算法 nth_element: 选出前两个最好等级的元素,使用算法 partition: 完成后,widgets.begin() 到goodEnd的区间容纳了 阅读全文
posted @ 2018-11-29 15:18 KidyCharon 阅读(153) 评论(0) 推荐(0)
摘要:算法章: 1. 演示一些比较少见的算法使你的生活变得简单 2. 演示怎么避免算法常见的问题 STL 容器插入对象会出现的问题: 出现的问题:transform 被告知它的目的区间是从 results.end() 开始的, 而 *results.end() 没有对象,所以不存在对象的赋值 把 tran 阅读全文
posted @ 2018-11-29 13:56 KidyCharon 阅读(176) 评论(0) 推荐(0)
摘要:使用 istreambuf_iterator : 阅读全文
posted @ 2018-11-28 19:38 KidyCharon 阅读(227) 评论(0) 推荐(0)
摘要:要实现在一个 reverse_iterator ri 指出的位置上插入新元素,在 ri.base() 指向的位置插入就行了。对于 insert 操作而言,ri 和 ri.base() 是等价的,而且 ri.base() 真的是 ri 真的是 ri 对应的iterator 要实现在一个 reverse 阅读全文
posted @ 2018-11-28 19:09 KidyCharon 阅读(165) 评论(0) 推荐(0)