c++ primer 学习笔记-第十章

来源:互联网 发布:淘宝什么是淘气值 编辑:程序博客网 时间:2024/06/05 06:07

习题10.1:

#include <iostream>#include <vector>#include <string>#include <algorithm>using std::cin; using std::cout; using std::endl; using std::flush;using std::vector; using std::string;using std::count;int main(){vector<int> ivec;int i, val;cout << "input vector series:" << endl;while (cin >> i)ivec.push_back(i);cin.clear();cout << "input the value u want to count:" << endl;cin >> val;auto times = count(ivec.cbegin(), ivec.cend(), val);cout << val << " occurs " << times << " times." << endl;getchar();getchar();return 0;}

习题10.2:

#include <iostream>#include <vector>#include <string>#include <list>#include <algorithm>using std::cin; using std::cout; using std::endl; using std::flush;using std::vector; using std::string; using std::list;using std::count;int main(){list<string> slst;string s, val;cout << "input list of string:" << endl;while (cin >> s)slst.push_back(s);cin.clear();cout << "input the value u want to count:" << endl;cin >> val;auto times = count(slst.cbegin(), slst.cend(), val);cout << val << " occurs " << times << " times." << endl;getchar();getchar();return 0;}

习题10.3:
#include <iostream>#include <vector>#include <string>#include <list>//#include <algorithm>#include <numeric>using std::cin; using std::cout; using std::endl; using std::flush;using std::vector; using std::string; using std::list;int main(){vector<int> ivec{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };int sum = std::accumulate(ivec.cbegin(), ivec.cend(), 0);cout << sum << endl;getchar();getchar();return 0;}

习题10.6:

#include <iostream>#include <vector>#include <string>#include <list>#include <algorithm>#include <numeric>using std::cin; using std::cout; using std::endl; using std::flush;using std::vector; using std::string; using std::list;int main(){vector<int> ivec{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };std::fill_n(ivec.begin(), ivec.size(), 0);for (auto i : ivec)cout << i << " ";cout << endl;getchar();getchar();return 0;}

习题10.9:

#include <iostream>#include <vector>#include <string>#include <list>#include <algorithm>#include <numeric>using std::cin; using std::cout; using std::endl; using std::flush;using std::vector; using std::string; using std::list;void print(const vector<string> &svec){for (const auto &s : svec)cout << s << " ";cout << endl;}void elimDups(vector<string> &svec){print(svec);std::sort(svec.begin(), svec.end());print(svec);auto end_unique = std::unique(svec.begin(), svec.end());print(svec);svec.erase(end_unique, svec.end());print(svec);}int main(){vector<string> svec;string s;while (cin >> s)svec.push_back(s);cin.clear();elimDups(svec);getchar();return 0;}

习题10.11:

#include <iostream>#include <vector>#include <string>#include <list>#include <algorithm>#include <numeric>using std::cin; using std::cout; using std::endl; using std::flush;using std::vector; using std::string; using std::list;void print(const vector<string> &svec){for (const auto &s : svec)cout << s << " ";cout << endl;}void elimDups(vector<string> &svec){print(svec);std::sort(svec.begin(), svec.end());print(svec);auto end_unique = std::unique(svec.begin(), svec.end());print(svec);svec.erase(end_unique, svec.end());print(svec);}bool isShorter(const string &s1, const string &s2){return s1.size() < s2.size();}int main(){vector<string> svec;string s;while (cin >> s)svec.push_back(s);cin.clear();elimDups(svec);std::stable_sort(svec.begin(), svec.end(), isShorter);print(svec);getchar();return 0;}

习题10.12:

#include <iostream>#include <vector>#include <string>#include <list>#include <algorithm>#include <numeric>#include "Sales_data.h"using std::cin; using std::cout; using std::endl; using std::flush;using std::vector; using std::string; using std::list;bool compareIsbn(const Sales_data &sd1, const Sales_data &sd2){int flag = sd1.isbn().compare(sd2.isbn());if (flag == -1)return true;elsereturn false;}int main(){vector<Sales_data> sdvec{ Sales_data("0-123-45678-0"), Sales_data("0-123-45678-9"), Sales_data("0-123-45378-9"), Sales_data("0-123-45678-5"), Sales_data("0-126-45678-5") };std::stable_sort(sdvec.begin(), sdvec.end(), compareIsbn);for (auto &s : sdvec)cout << s.isbn() << endl;getchar();getchar();return 0;}

习题10.13:

#include <iostream>#include <vector>#include <string>#include <list>#include <algorithm>#include <numeric>#include "Sales_data.h"using std::cin; using std::cout; using std::endl; using std::flush;using std::vector; using std::string; using std::list;bool five(const string &s){return s.size() >= 5;}void print(vector<string> &words){auto true_end = std::partition(words.begin(), words.end(), five);for (auto beg = words.begin(); beg != true_end;++beg)cout << *beg << " ";cout << endl;}int main(){vector<string> svec;string s;while (cin >> s)svec.push_back(s);cin.clear();print(svec);getchar();getchar();return 0;}

习题10.14:

auto add = [](int a, int b){return a + b; };

习题10.16:

#include <iostream>#include <vector>#include <string>#include <list>#include <algorithm>#include <numeric>#include "Sales_data.h"using std::cin; using std::cout; using std::endl; using std::flush;using std::vector; using std::string; using std::list;void elimDups(vector<string> &words){std::sort(words.begin(), words.end());auto end_unique = std::unique(words.begin(), words.end());words.erase(end_unique, words.end());}string make_plural(unsigned count, const string &word, const string &post){if (count > 1)return word + post;elsereturn word;}void biggies(vector<string> &words, vector<string>::size_type sz){elimDups(words);std::stable_sort(words.begin(), words.end(),[](const string &s1, const string &s2){return s1.size() < s2.size(); });auto iter = find_if(words.begin(), words.end(),[sz](const string &s){return s.size() >= sz; });auto count = words.end() - iter;cout << count << " " << make_plural(count, "word", "s") <<" of length " << sz << " or longer." << endl;std::for_each(iter, words.end(), [](const string &s){cout << s << " "; });cout << endl;}int main(){vector<string> svec{ "a", "red", "kitty", "bites", "a", "red", "turtle" };biggies(svec, 3);getchar();getchar();return 0;}

习题10.17:

#include <iostream>#include <vector>#include <string>#include <list>#include <algorithm>#include <numeric>#include "Sales_data.h"using std::cin; using std::cout; using std::endl; using std::flush;using std::vector; using std::string; using std::list;int main(){vector<Sales_data> sdvec{ Sales_data("0-123-45678-0"),Sales_data("0-123-45678-9"), Sales_data("0-123-45378-9"),Sales_data("0-123-45678-5"), Sales_data("0-126-45678-5") };std::stable_sort(sdvec.begin(), sdvec.end(), [](const Sales_data &sd1, const Sales_data &sd2){int flag = sd1.isbn().compare(sd2.isbn());if (flag == -1)return true;elsereturn false;});for (auto &s : sdvec)cout << s.isbn() << endl;getchar();getchar();return 0;}

习题10.18:

#include <iostream>  #include <vector>  #include <string>  #include <list>  #include <algorithm>  #include <numeric>  #include "Sales_data.h"  using std::cin; using std::cout; using std::endl; using std::flush;using std::vector; using std::string; using std::list;void elimDups(vector<string> &words){std::sort(words.begin(), words.end());auto end_unique = std::unique(words.begin(), words.end());words.erase(end_unique, words.end());}string make_plural(unsigned count, const string &word, const string &post){if (count > 1)return word + post;elsereturn word;}void biggies(vector<string> &words, vector<string>::size_type sz){elimDups(words);std::stable_sort(words.begin(), words.end(),[](const string &s1, const string &s2){return s1.size() < s2.size(); });auto iter = std::partition(words.begin(), words.end(),[sz](const string &s){return s.size() < sz; });auto count = words.end() - iter;cout << count << " " << make_plural(count, "word", "s") <<" of length " << sz << " or longer." << endl;std::for_each(iter, words.end(), [](const string &s){cout << s << " "; });cout << endl;}int main(){vector<string> svec{ "a", "red", "kitty", "bites", "a", "red", "turtle" };biggies(svec, 3);getchar();getchar();return 0;}

习题10.20:

#include <iostream>  #include <vector>  #include <string>  #include <list>  #include <algorithm>  #include <numeric>  #include "Sales_data.h"  using std::cin; using std::cout; using std::endl; using std::flush;using std::vector; using std::string; using std::list;vector<string>::size_type biggies(vector<string> &words, vector<string>::size_type sz){return std::count_if(words.cbegin(), words.cend(),[sz](const string &s){return s.size() > sz; });}int main(){vector<string> svec{ "the", "quick", "red", "fox", "jumps", "over", "the", "slow", "red", "turtle" };cout << biggies(svec, 6) << endl;getchar();getchar();return 0;}

习题10.21:

#include <iostream>  #include <vector>  #include <string>  #include <list>  #include <algorithm>  #include <numeric>  #include "Sales_data.h"  using std::cin; using std::cout; using std::endl; using std::flush;using std::vector; using std::string; using std::list;int main(){vector<string> svec{ "the", "quick", "red", "fox", "jumps", "over", "the", "slow", "red", "turtle" };int i = 8;auto f = [&i]()->bool{return --i ? false : true; };while (!f())cout << i << endl;cout << i << endl;getchar();getchar();return 0;}

习题10.22:

#include <iostream>    #include <vector>    #include <string>    #include <list>    #include <algorithm>    #include <numeric>    #include <functional>#include "Sales_data.h"    using std::cin; using std::cout; using std::endl; using std::flush;using std::vector; using std::string; using std::list;using std::placeholders::_1;bool check_size(const string &s, vector<string>::size_type sz){return s.size() <= sz;}int main(){vector<string> svec{ "the", "quick", "red", "fox", "jumps", "over", "the", "slow", "red", "turtle" };auto wc = count_if(svec.cbegin(), svec.cend(), bind(check_size, _1, 6));cout << wc << endl;getchar();getchar();return 0;}

习题10.24:

#include <iostream>    #include <vector>    #include <string>    #include <list>    #include <algorithm>    #include <numeric>    #include <functional>#include "Sales_data.h"    using std::cin; using std::cout; using std::endl; using std::flush;using std::vector; using std::string; using std::list;using std::placeholders::_1;bool check_size(const string &s, const string &s_given){return s.size() > s_given.size();}int main(){vector<string> svec{ "the", "quick", "red", "fox", "jumps", "over", "the", "slow", "red", "turtle" };auto first = std::find_if(svec.cbegin(), svec.cend(), bind(check_size, _1, "hah"));cout << *first << endl;getchar();getchar();return 0;}

习题10.25:

#include <iostream>    #include <vector>    #include <string>    #include <list>    #include <algorithm>    #include <numeric>    #include <functional>#include "Sales_data.h"    using std::cin; using std::cout; using std::endl; using std::flush;using std::vector; using std::string; using std::list;using std::placeholders::_1;void elimDups(vector<string> &words){std::sort(words.begin(), words.end());auto end_unique = std::unique(words.begin(), words.end());words.erase(end_unique, words.end());}string make_plural(unsigned count, const string &word, const string &post){if (count > 1)return word + post;elsereturn word;}inline auto check_size(const string &s, vector<string>::size_type sz)->bool{return s.size() < sz;}void biggies(vector<string> &words, vector<string>::size_type sz){elimDups(words);std::stable_sort(words.begin(), words.end(),[](const string &s1, const string &s2){return s1.size() < s2.size(); });auto iter = std::partition(words.begin(), words.end(),bind(check_size, _1, sz));auto count = words.end() - iter;cout << count << " " << make_plural(count, "word", "s") <<" of length " << sz << " or longer." << endl;std::for_each(iter, words.end(), [](const string &s){cout << s << " "; });cout << endl;}int main(){vector<string> svec{ "a", "red", "kitty", "bites", "a", "red", "turtle" };biggies(svec, 3);getchar();getchar();return 0;}

习题10.27:

#include <iostream>    #include <vector>    #include <string>    #include <list>    #include <algorithm>    #include <numeric>    #include <functional>#include "Sales_data.h"    using std::cin; using std::cout; using std::endl; using std::flush;using std::vector; using std::string; using std::list;using std::placeholders::_1;int main(){vector<string> svec{ "a", "red", "kitty", "bites", "a", "a", "red", "turtle." };list<string> slst;std::unique_copy(svec.cbegin(), svec.cend(), std::inserter(slst, slst.begin()));for (auto s : slst)cout << s << " ";cout << endl;getchar();getchar();return 0;}

习题10.29:

#include <iostream>    #include <fstream>#include <vector>    #include <string>    #include <list>    #include <algorithm>    #include <numeric>    #include <functional>#include <iterator>#include "Sales_data.h"    using std::cin; using std::cout; using std::endl; using std::flush;using std::vector; using std::string; using std::list;using std::placeholders::_1;int main(){std::ifstream in("火焰杯.txt");std::istream_iterator<string> string_iter(in);std::istream_iterator<string> string_eof;vector<string> svec(string_iter, string_eof);for (auto &s : svec)cout << s << " ";cout << endl;getchar();getchar();return 0;}

习题10.30:

#include <iostream>    #include <fstream>#include <vector>    #include <string>    #include <list>    #include <algorithm>    #include <numeric>    #include <functional>#include <iterator>#include "Sales_data.h"    using std::cin; using std::cout; using std::endl; using std::flush;using std::vector; using std::string; using std::list;using std::placeholders::_1;int main(){std::istream_iterator<int> in_iter(cin), eof;std::ostream_iterator<int> out_iter(cout," ");//加空格vector<int> ivec(in_iter, eof);//while(in_iter!=eof)ivec.push_back(*in_iter++);std::sort(ivec.begin(), ivec.end(), [](const int &a, const int &b)->bool{return a < b; });//lambdastd::copy(ivec.cbegin(), ivec.cend(), out_iter);getchar();getchar();return 0;}

习题10.32:

#include <iostream>    #include <fstream>#include <vector>    #include <string>    #include <list>    #include <algorithm>    #include <numeric>    #include <functional>#include <iterator>#include "Sales_item.h"    using std::cin; using std::cout; using std::endl; using std::flush;using std::vector; using std::string; using std::list;using std::placeholders::_1;void read(std::istream &is, vector<Sales_item> &item_vec){std::istream_iterator<Sales_item> item_iter(is), eof;std::copy(item_iter, eof, std::inserter(item_vec, item_vec.begin()));}bool compare_Isbn(const Sales_item &item1, const Sales_item &item2)//头文件里有重名,加了个下划线区别{return (-1 == item1.isbn().compare(item2.isbn())) ? true : false;}int main(){std::cout << "input several sale records & print:" << std::endl;vector<Sales_item> item_vec, item_solved;read(cin, item_vec);std::sort(item_vec.begin(), item_vec.end(), compare_Isbn);for (auto beg = item_vec.begin(), end = beg; beg != item_vec.end(); beg = end){end = std::find_if(beg, item_vec.end(),[beg](const Sales_item &item){return item.isbn() != beg->isbn(); });*beg = std::accumulate(beg, end, Sales_item(beg->isbn()));item_solved.push_back(*beg);}for (auto s : item_solved)cout << s << endl;getchar();getchar();return 0;}

习题10.34-35:

#include <iostream>    #include <fstream>#include <vector>    #include <string>    #include <list>    #include <algorithm>    #include <numeric>    #include <functional>#include <iterator>#include "Sales_item.h"    using std::cin; using std::cout; using std::endl; using std::flush;using std::vector; using std::string; using std::list;using std::placeholders::_1;int main(){vector<int> ivec{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };for (auto iter = ivec.crbegin(); iter != ivec.crend(); ++iter)cout << *iter << " ";cout << endl;for (auto iter = ivec.back(); iter != ivec.front()-1; --iter)cout << iter << " ";cout << endl;getchar();getchar();return 0;}

习题10.36:

#include <iostream>    #include <fstream>#include <vector>    #include <string>    #include <list>    #include <algorithm>    #include <numeric>    #include <functional>#include <iterator>#include "Sales_item.h"    using std::cin; using std::cout; using std::endl; using std::flush;using std::vector; using std::string; using std::list;using std::placeholders::_1;int main(){list<int> ilst{ 1, 2, 0, 3, 4, 5, 6, 7, 8, 9 };auto iter_zero = find(ilst.crbegin(), ilst.crend(), 0);//cout << *iter_zero << endl;cout << std::distance(iter_zero, ilst.crend());cout << endl;getchar();getchar();return 0;}

习题10.37:

#include <iostream>    #include <fstream>#include <vector>    #include <string>    #include <list>    #include <algorithm>    #include <numeric>    #include <functional>#include <iterator>#include "Sales_item.h"    using std::cin; using std::cout; using std::endl; using std::flush;using std::vector; using std::string; using std::list;using std::placeholders::_1;int main(){vector<int> ivec{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };list<int> ilst(std::find(ivec.crbegin(), ivec.crend(), 7),++std::find(ivec.crbegin(), ivec.crend(), 3));for (auto i : ilst)cout << i << " ";cout << endl;getchar();getchar();return 0;}


0 0