c++primer(第五版) 第十章 泛型算法习题答案
来源:互联网 发布:磁条读写器软件 编辑:程序博客网 时间:2024/05/22 15:28
第五版第九章以后的参考答案在网上很难找,于是就决定自己认真写一份,当做练习吧.
部分答案参考了github上大牛的代码.
10.1, 10.2
#include <iostream>#include <string>#include <vector>#include <algorithm>#include <list>using namespace std;int main(){ vector<int>v{1,2,3,4,5,6,7,8,9}; cout<<count(v.cbegin(), v.cend(),6)<<endl; list<string>l{"the","quick","red","fox","jumps","over","the","slow","red","turtle"}; cout<< count(l.cbegin(), l.cend(),"the")<<endl; return 0;}
10.3 10.4 10.5
#include <iostream>#include <string>#include <vector>#include <algorithm>#include <numeric>using namespace std;int main(){ vector<int>v {1,2,3,4,5,6,7,8,9}; cout<< accumulate(v.cbegin(), v.cend(),0)<<endl; vector<double>v_d {1.1,2.2,3,14,5.1}; cout<< accumulate(v_d.cbegin(), v_d.cend(),0)<< endl; //错误 初始累加和值为0(整型) 累加过程中会被强制转换为整型 cout<< accumulate(v_d.cbegin(), v_d.cend(),0.0)<< endl; return 0;// 10.5// 结果为false// c风格字符串equal要满足是同一块内存中的那一条字符串}
10.6 10.7 10.8
#include <iostream>#include <vector>#include <algorithm>using namespace std;int main(){ vector<int> vec {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; fill_n(vec.begin(), vec.size(), 0); for (auto i : vec) cout << i << " "; cout << endl;// 10.7// (a)// copy的第三个参数应该是一个插入迭代器// (b)// reserve是分配内存空间 并没有分配元素 应该使用resize// 10.8// 并不是标准库算法改变了容器大小 而是迭代器调用容器操作改变了容器大小}
10.9 10.10
#include<iostream>#include<vector>#include<algorithm>using namespace std;void elimDups(vector<string>& vec){ for(auto i:vec) cout<<i<<" "; cout<<endl; sort(vec.begin(),vec.end()); for(auto i:vec) cout<<i<<" "; cout<<endl; vector<string>::iterator it=unique(vec.begin(),vec.end()); for(auto i:vec) cout<<i<<" "; cout<<endl; vec.erase(it,vec.end()); for(auto i:vec) cout<<i<<" "; cout<<endl;}int main(){ vector<string>vec{"the","quick","red","fox","jumps","over","the","slow","red","turtle"}; elimDups(vec); return 0;}// 10.10// @pezy: Cause the library algorithms operate on iterators, not containers. Thus, an algorithm cannot (directly) add or remove elements.// 标准库算法都是针对迭代器的操作,而不是容器,因此,它不能直接添加或删除元素.
10.11 10.13
#include<iostream>#include<vector>#include<algorithm>using namespace std;bool isShorter(const string&s1,const string& s2){ return s1.size()<s2.size();}bool part(const string& str1){ return str1.size()>=5?true:false;}void elimDups(vector<string>& vec){ sort(vec.begin(),vec.end()); vector<string>::iterator it=unique(vec.begin(),vec.end()); vec.erase(it,vec.end());}int main(){// 10.11 vector<string>vec{"the","quick","red","fox","jumps","over","the","slow","red","turtle"}; elimDups(vec); stable_sort(vec.begin(),vec.end(),isShorter); for(auto i:vec) cout<<i<<" "; cout<<endl;// 10.13 vector<string>vec2{"the","quick","red","fox","jumps","over","the","slow","red","turtle"}; partition(vec2.begin(),vec2.end(),part); for(auto i:vec2) cout<<i<<" "; cout<<endl; return 0;}
10.14 10.15 10.17 10.18
#include<iostream>#include<vector>#include<algorithm>#include"Sales_data.h"using namespace std;void elimdups(vector<string>& vs){ sort(vs.begin(), vs.end()); auto new_end = unique(vs.begin(), vs.end()); vs.erase(new_end, vs.end());}void biggies_partition(vector<string>& vs, int sz){ elimdups(vs); auto pivot = partition(vs.begin(), vs.end(), [sz](const string& s) {return s.size() >= sz;}); for (auto it = vs.cbegin(); it != pivot; ++it) cout << *it << " ";}void biggies_stable_partition(vector<string>& vs, int sz){ elimdups(vs); auto pivot =stable_partition(vs.begin(), vs.end(),[sz](const string& s) { return s.size() >= sz; }); for (auto it = vs.cbegin(); it != pivot; ++it) cout << *it << " ";}int main(){// 10.14 auto func=[](int a,int b)->int{return a+b;};// 10.15 int a=5; auto func2=[a](int b)->int{return a+b;};// 10.17 Sales_data d1("aa"), d2("aaaa"), d3("aaa"), d4("z"), d5("aaaaz"); vector<Sales_data> v{d1, d2, d3, d4, d5}; sort(v.begin(), v.end(),[](const Sales_data& sd1, const Sales_data& sd2) {return sd1.isbn().size() < sd2.isbn().size();}); for (const auto& element : v) cout << element.isbn() << " "; cout << endl;// 10.18 vector<string>vec{"the","quick","red","fox","jumps","over","the","slow","red","turtle"}; biggies_partition(vec,5); for(auto i:vec) cout<<i<<" "; cout<<endl;// 10.19 vector<string>vec2{"the","quick","red","fox","jumps","over","the","slow","red","turtle"}; biggies_stable_partition(vec2,5); for(auto i:vec2) cout<<i<<" "; cout<<endl; return 0;}
10.20 10.21
#include<iostream>#include<algorithm>using namespace std;int main(){// 10.20 vector<string>vec{"the","quick","red","fox","jumps","over","the","slow","red","turtle","ssssssss","ssssssaas"}; cout<<count_if(vec.cbegin(),vec.cend(),[](const string& str1){return str1.size()>6;})<<endl;// 10.21 int s=6; int d=3; auto f1=[&]()->int{ if(d<1) return 0; else return --d;}; while(s--) std::cout<<f1()<<" "; return 0;}
10.22 10.23 10.24 10.25
#include<iostream>#include<vector>#include<algorithm>using namespace std;using namespace std::placeholders;bool check_size2(const string& str1,int sz){ return str1.size()<=sz;}void elimdups(std::vector<std::string>& vs){ std::sort(vs.begin(), vs.end()); auto new_end = std::unique(vs.begin(), vs.end()); vs.erase(new_end, vs.end());}bool check_size(const std::string& str,size_t sz){ return str.size()>=sz;}void biggies(std::vector<std::string>& vs, std::size_t sz){ using std::string; elimdups(vs); auto wc = std::stable_partition(vs.begin(), vs.end(),bind(check_size,_1,sz)); std::for_each(vs.begin(),wc, [](const string& s) { std::cout << s << " "; });}int main(){// 10.22 vector<string>vec{"the","quick","red","fox","aaaaaaa","jumps","over","bbbbbbbb","the","slow","red","turtle"}; auto it=partition(vec.begin(),vec.end(),bind(check_size2,_1,6)); for(auto i=vec.begin();i!=it;i++) cout<<*i<<" "; cout<<endl;// 10.23// 原函数有n个参数 则bind后有n+1个参数 第n+1个参数为原函数名// 10.24 vector<int>vec2{1,2,3,4,5,6,7,8,9,10}; string str="sssss"; auto it2=partition(vec2.begin(),vec2.end(),bind(check_size,str,_1)); cout<<*it2<<endl;// 10.25 std::vector<std::string> v{"1234", "1234", "1234", "hi~", "alan", "alan", "cp"}; biggies(v, 3); cout <<endl; return 0;}
10.27 10.28
#include<iostream>#include<vector>#include<list>#include<algorithm>using namespace std;int main(){ vector<int>v{1,2,3,4,5,6,7,8,9};// 10.27 list<int>lst; unique_copy(v.begin(),v.end(),front_inserter(lst)); for(auto i:lst) cout<<i<<" "; cout<<endl;// 10.28 list<int>v2(20),v3(20),v4(20); copy(v.begin(),v.end(),front_inserter(v2)); copy(v.begin(),v.end(),back_inserter(v3)); copy(v.begin(),v.end(),inserter(v4,v4.begin())); for(auto i:v2) cout<<i<<" "; cout<<endl; for(auto i:v3) cout<<i<<" "; cout<<endl; for(auto i:v4) cout<<i<<" "; cout<<endl; return 0;}
10.29 10.30 10.31 10.32 10.33
#include<iostream>#include<cstring>#include<iterator>#include<vector>#include<algorithm>#include<fstream>#include"Sales_item"using namespace std;void func(ifstream& in,const string& odd,const string& even){ ofstream f1(odd),f2(even); ostream_iterator<int>os1(f1," "),os2(f2," "); int temp; while(in>>temp){ if(temp%2) *os1++=temp; else *os2++=temp; }}int main(){// 10.29 ifstream in("in.txt"); istream_iterator<string>start(in),eof; vector<string>vec; while(start!=eof) cout<<*start++<<" ";// 10.30 vector<int>vec2; istream_iterator<int>start2(cin),eof2; copy(start2,eof2,back_inserter(vec)); sort(vec2.begin(),vec2.end()); copy(vec2.cbegin(),vec2.cend(),ostream_iterator<int>(cout," "));// 10.31 vector<int>vec3; istream_iterator<int>start3(cin),eof3; unique_copy(start3,eof3,back_inserter(vec2)); sort(vec3.begin(),vec3.end()); copy(vec3.cbegin(),vec3.cend(),ostream_iterator<int>(cout," "));// 10.32 istream_iterator<Sales_item> in_iter(cin), in_eof; vector<Sales_item> vec4; while (in_iter != in_eof) vec.push_back(*in_iter++); sort(vec4.begin(), vec4.end(), [](Sales_item const& lhs, Sales_item const& rhs) { return lhs.isbn() < rhs.isbn(); }); for (auto beg = vec4.cbegin(), end = beg; beg != vec4.cend(); beg = end) { end = find_if(beg, vec4.cend(), [beg](const Sales_item& item) { return item.isbn() != beg->isbn(); }); cout << accumulate(beg, end, Sales_item(beg->isbn()))<< endl; }// 10.33 ifstream is("in2.txt"); func(is,"f1.txt","f2.txt"); return 0;}
10.34 10.35 10.36 10.37
#include <iostream>#include <string>#include <list>#include <algorithm>using namespace std;int main(){// 10.34 list<int> v{1,2,3,0,4,5,6,7,8,9}; for(auto i=v.crbegin();i!=v.crend();i++) cout<<*i<<" "; cout<<endl;// 10.35 auto i=--v.end(); while(i!=v.begin()) cout<<*i--<<" "; cout<<*i<<endl;// 10.36 auto ans=find(v.crbegin(),v.crend(),0); auto loc=ans.base(); cout<<*loc<<endl;// 10.37 vector<int>v2{1,2,3,4,5,6,7,8,9}; list<int>l; copy(v2.crbegin()+2,v2.crbegin()+7,back_inserter(l)); for(auto i:l) cout<<i<<" "; return 0;}
10.39 10.40
#include <iostream>#include <string>#include <list>#include <algorithm>using namespace std;int main(){// 10.39// list: 双向迭代器// vector: 随机访问迭代器// 10.40// copy: 第一,二个参数为输入迭代器 第三个为输出迭代器// reverse:双向访问迭代器// unique:前向迭代器 return 0;}
10.41
#include <iostream>#include <string>#include <list>#include <algorithm>using namespace std;int main(){// 10.41 replace(beg, end, old_val, new_val); // 在迭代器beg 和end 范围内 将old_val 替换成 new_val replace_if(beg, end, pred, new_val); // 在迭代器beg 和end 范围内 将满足条件的pred的值替换成 new_val replace_copy(beg, end, dest, old_val, new_val); // 将迭代器beg 和end 范围内的值拷贝到dest指向的容器中 并且在新容器中old_val 替换成了 new_val replace_copy_if(beg, end, dest, pred, new_val); // 将迭代器beg 和end 范围内的值拷贝到dest指向的容器中 并且在新容器中满足条件的pred的值 替换成了 new_val return 0;}
#include<iostream>#include<algorithm>#include<list>#include<string>using namespace std;int main(){ list<string>lst{"aaa","bbb","ccc","aaa","bb","bbbb","cc","ccc"}; lst.sort(); lst.unique(); for(auto i:lst) cout<<i<<" "; cout<<endl; return 0;}
1 0
- c++primer(第五版) 第十章 泛型算法习题答案
- C++Primer 中文版 第五版 第十章课后习题答案
- c++ primer(第五版)学习笔记及习题答案代码版(第十章)泛型算法
- c++ primer第五版(中文)习题答案 第十章第二节第一小节-只读算法
- c++ primer第五版(中文)习题答案 第十章第六节-特定容器算法
- C++Primer第五版 第十章习题答案(1~10)
- C++Primer第五版 第十章习题答案(21~30)
- C++Primer第五版 第十章习题答案(11~20)
- C++Primer第五版 第十章习题答案(31~40)
- C++Primer第五版 第十章习题答案(41~42)
- C++primer(第五版)第十章 泛型算法
- C++Primer(第五版) 习题答案
- c++primer第五版课后练习答案(第十章)
- c++ primer第五版(中文)习题答案 第十章第二节第二小节-写容器元素的算法
- c++ primer第五版(中文)习题答案 第十章第二节第三小节-重排容器元素的算法
- c++ primer第五版(中文)习题答案 第十章第三节第一小节-向算法传递函数
- c++ primer第五版(中文)习题答案 第十章第五节第二三小节-算法形参合命名规范
- C++Primer 中文版 第五版 第五章课后习题答案
- 用C++实现一个自动注册的工厂
- 登录遇见的小问题
- window下彻底卸载删除SQL Serever 2012
- 获取了职业资格证书二级/技师
- hbase 伪分布环境搭建
- c++primer(第五版) 第十章 泛型算法习题答案
- 广度优先搜索
- ?[JAVA].codes CORE JAVA 1 4-1
- Class for Time
- saiku安装
- 使用CocoaPods 为项目配置第三方类库
- 【Western Digital】固件区学习之21模块
- Android的四种数据储存方式之SharedPreferences
- 密码学基本介绍