【C++ Primer】 第十章 泛型算法(一)

向算法传递函数

练习10.11

 1 #include<iostream>
 2 #include<string>
 3 #include<vector>
 4 #include<algorithm>
 5 #include<fstream>
 6 using namespace std;
 7
 8 void elimDups(vector<string> &words);
 9 bool isShorter(const string &s1, const string &s2);
10
11 int main()
12 {
13     ifstream in("test.txt");
14     if (!in)
15     {
16         cout << "无法打开文件" << endl;
17         exit(1);
18     }
19
20     vector<string> vec;
21     string word;
22     while (in >> word)
23         vec.push_back(word);
24     cout << "排序前:";
25     for (auto &s : vec)
26         cout << s << " ";
27     cout << endl;
28     elimDups(vec);
29     stable_sort(vec.begin(), vec.end(), isShorter);
30     cout << "排序后: ";
31     for (auto &s : vec)
32         cout << s << " ";
33     return 0;
34 }
35
36 bool isShorter(const string &s1, const string &s2)
37 {
38     return s1.size() < s2.size();
39 }
40
41 void elimDups(vector<string> &words)
42 {
43     sort(words.begin(), words.end());
44     auto unique_end = unique(words.begin(), words.end());
45     words.erase(unique_end, words.end());
46 }

【运行结果】

原文地址:https://www.cnblogs.com/sunbines/p/8809876.html

时间: 2024-08-29 06:05:07

【C++ Primer】 第十章 泛型算法(一)的相关文章

【C++ Primer | 10】泛型算法

1 find(beg, end); 2 count(beg, end); 3 reverse(beg, end); 4 fill(beg, end, val); 5 sort(beg, end); 6 stalbe_sort(beg, end); 7 min(val1, val2); 8 max(vl1, val2); 9 min_element(beg, end); 10 ma_element(beg, end); 11 accumulate(beg, emd, val); //<numeri

【C++ Primer | 07】泛型算法

定制操作 1 #include <iostream> 2 #include <string> 3 #include <vector> 4 #include <algorithm> 5 #include <numeric> 6 #include <list> 7 using namespace std; 8 9 template <typename Sequence> 10 inline ostream& print

C++primer拾遗(第十章:泛型算法)

泛型算法,重要而且常用.虽然只是看了一遍书,但是感觉需要研究的地方还很多. 总结不易,转载注明出处,谢谢. http://www.cnblogs.com/linhaowei0389/

C++ Primer笔记6_STL之泛型算法

1.泛型算法: 大多数算法定义在头文件algorithm中,标准库还在头文件numeric中定义了一组数值泛型算法 只读算法: 举例: find函数用于找出容器中一个特定的值,有三个参数 int val = 10;//val为我们需要查找的值 auto result = find(vec.begin(), vec.end(), val): cout << "The value "<< val << (result == vec.end() ? &qu

【足迹C++primer】31、初识泛型算法

初识泛型算法 理解算法的最基本方法是了解他们是否读取元素.改变元素或是重排元素顺序! 只读算法 #include<iostream> #include<numeric> using namespace std; //对vec中的元素求和,初值是0 int sum=accumulate(vec.cbegin(), vec.cend(), 0); 这里面第三个参数决定了函数使用哪个加法运算符以及返回值类型. 算法和元素类型 string sum=accumulate(v.cbegin(

第十一章 泛型算法 C++ PRIMER

vector<int>::const_iterator result = find(vector.begin(). vector.end(),search_value); 如果查找失败,分会end()  如果有两个,会返回哪一个的迭代器? int *reauslt = find(ia,ia+6,search_value); 也可以同样处理字符串 算法要以<algorithm><numeric>,依赖于迭代器和迭代器的算法实现,算法可能改变值,可能移动元素,单从不直接添加

【足迹C++primer】30、概述(泛型算法)

概述(泛型算法) 大多数算法都定义在头文件algorithm中.标准库还在头文件numeric中定义了一组泛型算法. #include<iostream> #include<numeric> #include<vector> #include<algorithm> using namespace std; int main() { vector<int> vec; for(size_t t=0 ; t != 44 ; ++t) { vec.pus

C++ Primer 学习笔记_45_STL实践与分析(19)--泛型算法的结构

STL实践与分析 --泛型算法的结构 引言: 正如全部的容器都建立在一致的设计模式上一样,算法也具有共同的设计基础. 算法最主要的性质是须要使用的迭代器种类.全部算法都指定了它的每一个迭代器形參可使用的迭代器类型.比方,假设形參必须为随机訪问迭代器则可提供vector或 deque类型的迭代器,或者提供指向数组的指针.而其它容器的迭代器不能用在这类算法上. C++还提供了另外两种算法模式:一种模式由算法所带的形參定义;还有一种模式则通过两种函数命名和重载的规范定义. 一.算法的形參模式 大多数的

C++ Primer 读书笔记:第11章 泛型算法

第11章 泛型算法 1.概述 泛型算法依赖于迭代器,而不是依赖容器,需要指定作用的区间,即[开始,结束),表示的区间,如上所示 此外还需要元素是可比的,如果元素本身是不可比的,那么可以自己定义比较函数. 2.常用的泛型算法函数: fill,fill_n, copy, replace, sort, unique, count_if, stable_sort 此外在有一个谓词函数会结合以上的函数使用,像sort, count_if等 3.再谈迭代器 (1)插入迭代器 back_inserter, f