摘要: 与其他容器不同,链表类型list与forward_list定义了几个成员函数形式的算法,如下表所示。特别是,它们定义了独有的sort、merge、remove、reverse和unique。通用版本的sort要求随机访问迭代器,因此不能用于list和forward_list,因为这两个类型分别提供双... 阅读全文
posted @ 2014-08-17 22:32 Jessica程序猿 阅读(437) 评论(0) 推荐(0) 编辑
摘要: 任何算法的最基本的特性是它要求其迭代器提供哪些操作。某些算法,如find,只要求通过迭代器访问元素、递增迭代器以及比较两个迭代器是否相等这些能力。其他一些算法,如sort,还要求读、写和随机访问元素的能力。算法所要求的迭代器操作可以分为5个迭代器类别,如表所示:迭代器类别输入迭代器 只... 阅读全文
posted @ 2014-08-17 22:29 Jessica程序猿 阅读(524) 评论(0) 推荐(0) 编辑
摘要: 除了为每个容器定义的迭代器之外,标准库在头文件iterator中还定义了额外几种迭代器。这些迭代器包括以下几种。插入迭代器:这些迭代器被绑定到一个容器上,可用来向容器插入元素流迭代器:这些迭代器被绑定到输入或输出上,可用来遍历所有关联的IO流反向迭代器:这些迭代器向后而不是向前移动。除了forwar... 阅读全文
posted @ 2014-08-17 22:27 Jessica程序猿 阅读(1514) 评论(3) 推荐(1) 编辑
摘要: 对于那种只有一两个地方使用的简单操作,lambda表达式是最有用的。如果我们需要在很多地方使用相同的操作,通常应该定义一个函数,而不是多次编写相同的lambda表达式。类似的,如果一个操作需要很多语句才能完成,通常使用函数更好。如果lambda的捕获列表为空,通常可以用函数来代替它。如前章节所示,既... 阅读全文
posted @ 2014-08-17 22:25 Jessica程序猿 阅读(1688) 评论(0) 推荐(0) 编辑
摘要: 很多算法都会比较输入序列中的元素。默认情况下,这类算法使用元素类型的 &words,vector::size_type sz){ elimDups(words); stable_sort(words.begin(),words.end(),isShorter); //获取一个迭代器... 阅读全文
posted @ 2014-08-17 22:22 Jessica程序猿 阅读(1820) 评论(0) 推荐(0) 编辑
摘要: 除了少数例外,标准库算法都对一个范围内的元素进行操作。我们将此元素范围称为“输入范围”。接受输入范围的算法总是使用前两个参数来表示此范围,两个参数分别是指想要处理的第一个元素和尾元素之后位置的迭代器。虽然大多数算法遍历输入范围的方式相似,但它们使用范围中元素的方式不同。理解算法的最基本的方法就是了解... 阅读全文
posted @ 2014-08-17 22:20 Jessica程序猿 阅读(695) 评论(0) 推荐(0) 编辑
摘要: 顺序容器只定义了很少的操作:在多数情况下,我们可以添加和删除元素。访问首尾元素、确定容器是否为空以及获得指向首元素或尾元素之后位置的迭代器。如果我们想要做:查找特定元素、替换或删除一个特定值、重排元素顺序等。标准库并未给每个容器都定义成员函数来实现这些操作,而是定义了一组泛型算法:称它们为“算法”,... 阅读全文
posted @ 2014-08-17 22:19 Jessica程序猿 阅读(777) 评论(0) 推荐(0) 编辑
摘要: 10.42 使用list的算法实现排序和删除重复元素。#include#include#include#includeusing namespace std;void elimDup(list &words){ words.sort(); words.unique();}bool isS... 阅读全文
posted @ 2014-08-17 21:45 Jessica程序猿 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 10.29 编写程序,使用流迭代器读取一个文本文件,存入一个vector中的string里。#include#include#include#include#includeusing namespace std;int main(){ ifstream in("1.txt"); istr... 阅读全文
posted @ 2014-08-17 19:57 Jessica程序猿 阅读(440) 评论(0) 推荐(0) 编辑
摘要: 10.24 给定一个string,使用bind和check_size在一个int的vector中查找第一个大于string长度的值。#include#include#include#include#includeusing namespace std;bool check_size(vector::... 阅读全文
posted @ 2014-08-17 16:44 Jessica程序猿 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 10.21 编写一个lambda,捕获一个局部int变量,并递减变量值,直至它变为0.一旦变量变为0,再调用lambda应该不再递减变量。lambda应该返回一个bool值,指出捕获的变量是否为0.#include#includeusing namespace std;int main(){ ... 阅读全文
posted @ 2014-08-17 15:23 Jessica程序猿 阅读(980) 评论(0) 推荐(0) 编辑
摘要: 编写程序,求大于等于一个给定长度的单词有多少。我们还会修改输出,使程序只打印大于等于给定长度的单词。使用find_if实现的代码如下:#include#include#include#includeusing namespace std;void biggies(vector &words,vect... 阅读全文
posted @ 2014-08-17 14:13 Jessica程序猿 阅读(305) 评论(0) 推荐(0) 编辑
摘要: 10.13 标准库定义了名为partition的算法,它接受一个谓词,对容器内容进行划分,使得谓词为true的值会排在容器的前半部分,而使谓词为false的值会排在后半部分。算法返回一个迭代器,指向最后一个使用谓词为true的元素之后的位置。编写程序,接受一个string,返回一个bool值,指出s... 阅读全文
posted @ 2014-08-17 12:56 Jessica程序猿 阅读(334) 评论(0) 推荐(0) 编辑
摘要: 10.11编写程序,使用stable_sort和isShorter将传递给你的elimDups版本的vector排序。打印vector的内容。#include#include#include#includeusing namespace std;void elimDup(vector &words)... 阅读全文
posted @ 2014-08-17 12:26 Jessica程序猿 阅读(632) 评论(0) 推荐(0) 编辑
摘要: void reserve (size_type n);reserver函数用来给vector预分配存储区大小,即capacity的值 ,但是没有给这段内存进行初始化。reserve 的参数n是推荐预分配内存的大小,实际分配的可能等于或大于这个值,即n大于capacity的值,就会reallocate... 阅读全文
posted @ 2014-08-17 11:22 Jessica程序猿 阅读(6485) 评论(0) 推荐(0) 编辑
摘要: 容器类型上的操作形成了一种层次:某些操作是所有容器类型都提供的,如下表所示一般来说,每个容器都定义在一个头文件中,文件名与类型名相同。即,deque定义在头文件deque中,list定义在头文件list中,以此类推。容器均定义为模板类。例如对于vector,我们必须提供额外信息来生成特定的容器类型。... 阅读全文
posted @ 2014-08-17 10:03 Jessica程序猿 阅读(372) 评论(0) 推荐(0) 编辑