C++Primer第五版 第十章习题答案(21~30)
来源:互联网 发布:野蛮时代 知乎 编辑:程序博客网 时间:2024/05/16 09:17
21:知识点1:值捕获想修改变量的话,可以在参数列表后加mutable进行修改。引用捕获也必须是非const的变量才可以进行修改。
知识点2:若不明显指出返回类型,需要在参数列表之后位置返回类型:->bool。
#include<iostream>#include<string>#include<vector>#include<algorithm>#include<numeric>using namespace std;int main(int argc, char**argv){int i = 5;auto f = [&i]()->bool {if (i == 0){return true;} else{--i;return false;}};//引用捕获、尾置返回类型int j = f();cout<<j<<endl;;return 0;}
22:知识点:对于那种只在一两个地方使用的简单操作,lambda是非常有用的。但是若需要在不同的地方使用相同的操作,通常应该定义一个函数。
#include<iostream>#include<string>#include<vector>#include<algorithm>#include<numeric>using namespace std;bool func(string &s){return s.size()<=6;}int main(int argc, char**argv) { string a[10] = {"diuwudh","udh","dewiudh","wudh","diutrwu","h","diuw","diuwudhg257","h","d"}; vector<string> vec1(a,a+10);//利用数组初始化vector cout<<"长度小于等于6的字符串有"<<count_if(vec1.begin(),vec1.end(),func)<<"个"; return 0; }
23:知识点:bind()函数,头文件为functional,作用是将参数隐式的增多,接受一个可调用参数,生成一个新的可调用对象。
auto func1 = bind(func2, _1,sz);//_n表示占位符,由func1调用时提供。调用func1时,就会替换为func2函数。
n表示占位符的个数的话,bind的参数数为n+1个,多出来一个参数是为了让它能够找到自己。
24:知识点:bind()作用很多,可以直接颠倒参数的顺序,绑定引用的参数必须使用ret函数和cref函数
#include<iostream>#include<string>#include<vector>#include<algorithm>#include<numeric>#include<functional>//必须using namespace std;using std::placeholders::_1;//必须bool check_size(const int &s, string::size_type sz){return sz > s;}int main(int argc, char**argv) { string _string = "MyLove";//给定一个stringint a[10] = {5,5,6,8,5,4,9,5,2,4}; vector<int> vec1(a,a+10);//利用数组初始化vector string::size_type _length = _string.size();//使用bind不仅需要头文件,还需要声明命名空间cout<<"长度小于等于6的字符串有"<<count_if(vec1.begin(),vec1.end(),bind(check_size, _1, _length))<<"个"; return 0; }
25:知识点:bind()的作用就是将参数直接增多
#include<iostream> #include<string> #include<vector> #include<algorithm> #include<numeric> #include<functional>using namespace std;using namespace placeholders;//占位符的命名空间void elimDups(vector<string> &s) { sort(s.begin(),s.end());//sort排序 vector<string>::iterator str = unique(s.begin(),s.end());//unique排序 s.erase(str,s.end());//erase()操作 } bool check_size(const string &s, string::size_type sz){return s.size()<=sz;}void biggis(vector<string> &s, vector<string>::size_type sz) { elimDups(s);//字典排序、删除重复 stable_sort(s.begin(),s.end(),[](const string &a,const string &b){return a.size()<b.size();});//按长度排序 auto it1 = partition(s.begin(),s.end(),bind(check_size,_1,sz)/*[sz](const string &s){return s.size()<=sz;}*/); for (it1; it1 != s.end(); ++it1) { cout<<*it1<<" "; } } int main(int argc, char**argv) { string a[10] = {"diuwudh","udh","diudh","wudh","diuwu","h","diuw","diuwudhg257","h","d"}; vector<string> vec1(a,a+10);//利用数组初始化vector biggis(vec1,4);//找出长度大于4的字符串 return 0; }
26:知识点1:几种特殊的迭代器—实际上相当于一个泛型算法,接受一个容器作为参数,产生一个迭代器,将元素插入容器之中
插入迭代器:这些迭代器绑定到容器上,可以用来向容器插入元素
流迭代器:绑定到输入输出流上,用来遍历所有关联的IO流
反向迭代器:向后移动而不是向前移动,出了forward_list其他容器都有
移动迭代器:移动容器中的元素
知识点2:插入器,接受一个容器作为参数,生成一个迭代器,可以向容器中添加元素。++it,it++,*it都不会产生任何效果,只能返回it(插入迭代器),it = t 在it指向的位置插入元素t。
知识点3:插入迭代器分为三种:back_inserter()创建一个使用push_back的迭代器,front_inserter()创建一个push_front的迭代器,inserter()创建一个insert迭代器,接受两个参数。插入到指定迭代器之前。(前提是容器必须支持push_back()的操作
区别就是其具体的工作过程,front_insert()最为特殊,总是将元素插在容器之首位置。
27:知识点:unique_copy():拷贝不重复元素,back_insert():插入迭代器(需包含iterator头文件)
#include<iostream> #include<string> #include<vector> #include<algorithm> #include<numeric> #include<functional>#include<iterator>using namespace std;using namespace placeholders;//占位符的命名空间int main(int argc, char**argv) { string a[10] = {"love","love8","love","love","love","h","diuw","diuwudhg257","love","d"}; vector<string> vec1(a,a+10);//利用数组初始化vector vector<string> vec2;//实现包含头文件iteratorunique_copy(vec1.cbegin(),vec1.cend(),back_inserter(vec2));//不支持push_front?cout<<"字符串中的不重复字符为:";for (int i = 0; i<vec2.size(); ++i){cout<<vec2[i]<<" ";}return 0; }
28:
#include<iostream> #include<string> #include<vector> #include<algorithm> #include<numeric> #include<functional>#include<iterator>using namespace std;using namespace placeholders;//占位符的命名空间int main(int argc, char**argv) { int a[10] = {1,2,3,4,5,6,7,8,9}; vector<int> vec1(a,a+9);//利用数组初始化vector vector<int> vec2;vector<int> vec3;vector<int> vec4;//实现包含头文件iteratorcopy(vec1.cbegin(),vec1.cend(),back_inserter(vec2));copy(vec1.cbegin(),vec1.cend(),front_inserter(vec3));//不支持push_front?,vector这个容器不支持copy(vec1.cbegin(),vec1.cend(),inserter(vec4,vec4.begin()));cout<<"vec2字符为:";for (int i = 0; i<vec2.size(); ++i){cout<<vec2[i]<<" ";}cout<<endl<<"vec3字符为:";for (int i = 0; i<vec3.size(); ++i){cout<<vec3[i]<<" ";}cout<<endl<<"vec4字符为:";for (int i = 0; i<vec4.size(); ++i){cout<<vec4[i]<<" ";}return 0; }
29:知识点:io迭代器将他们对应的流当作特定类型的元素序列来处理。通过使用流迭代器,可以用泛型算法从流中对象读取数据以及写数据
#include<iostream> #include<fstream>#include<string> #include<vector> #include<algorithm> #include<numeric> #include<functional>#include<iterator>using namespace std;using namespace placeholders;//占位符的命名空间int main(int argc, char**argv) { vector<string> vec1;ifstream in1("1.txt");//不允许使用不完整类型,是因为没有头文件~~istream_iterator<string> str(in1);istream_iterator<string> end;//尾后迭代器copy(str,end,back_inserter(vec1));//存入vec1for (int i = 0; i < vec1.size(); ++i){cout<<vec1[i]<<endl;}return 0; }
30:
#include<iostream> #include<fstream>#include<string> #include<vector> #include<algorithm> #include<numeric> #include<functional>#include<iterator>using namespace std;using namespace placeholders;//占位符的命名空间int main(int argc, char**argv) { vector<int> vec1;//创建流迭代器、尾后迭代器,最好是这样,放在一起,不然很可能类型不同就会报错istream_iterator<int> str(cin), end;//!=左右两边得是可以比较的嘛!// while (str != end)// {// vec1.push_back(*str++);// // }//此操作和copy一样的效果,只不过要记得++.copy(str,end,back_inserter(vec1));//存入vec1sort(vec1.begin(),vec1.end());//不能用cbegin(),我日for (int i = 0; i < vec1.size(); ++i){cout<<vec1[i]<<endl;}return 0; }
1 0
- C++Primer第五版 第十章习题答案(21~30)
- C++Primer 中文版 第五版 第十章课后习题答案
- c++primer(第五版) 第十章 泛型算法习题答案
- C++Primer第五版 第十章习题答案(1~10)
- C++Primer第五版 第十章习题答案(11~20)
- C++Primer第五版 第十章习题答案(31~40)
- C++Primer第五版 第十章习题答案(41~42)
- C++Primer(第五版) 习题答案
- C++Primer第五版 第三章习题答案(21~30)
- C++Primer第五版 第四章习题答案(21~30)
- C++Primer第五版 第六章习题答案(21~30)
- C++Primer第五版 第七章习题答案(21~30)
- C++Primer第五版 第九章习题答案(21~30)
- C++Primer第五版 第十一章习题答案(21~30)
- C++Primer第五版 第十二章习题答案(21~30)
- C++Primer第五版 第十三章习题答案(21~30)
- C++Primer第五版 第十五章习题答案(21~30)
- C++Primer第五版 第十六章习题答案(21~30)
- java安全架构____java SHA加密
- RMQ
- directx中第四卷
- 数据结构及算法 2-复习java
- javascript DOM编程艺术 读后感与笔记
- C++Primer第五版 第十章习题答案(21~30)
- SPOJ FACVSPOW(数论+二分)
- Unity--简单Buff系统
- [AHK]点击记事本的关闭按钮时最小化窗口
- 关于FineCMS伪静态的一些问题
- 【BZOJ 1977】[BeiJing2010组队]次小生成树 Tree
- Meet-in-the-middle思想的一些应用
- React Native,第一个Hello word程序
- 【520】Detect Capital