C++Primer 第10章 bind与迭代器
生活随笔
收集整理的這篇文章主要介紹了
C++Primer 第10章 bind与迭代器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C++Primer 第10章 bind與迭代器
//10.20,10.22 #include<iostream> #include<vector> #include<string> #include<algorithm> #include<functional> using namespace std; using namespace std::placeholders;bool sumcount(const string &str, const string::size_type &size) {return str.size() == size; }int main() {vector<string> str{ "wo","shi","ni","ba","ba!" };const string::size_type &sz = 2;cout << count_if(str.begin(), str.end(), bind(sumcount, _1, sz)) << endl;cout << count_if(str.begin(), str.end(), [&](const string &str) {return str.size() == sz; }) << endl; }//10.24 #include<iostream> #include<vector> #include<string> #include<algorithm> #include<functional> using namespace ::std; using namespace ::std::placeholders; bool strsize(string::size_type size,const string &str) {return size == str.size(); } int main() {string str{ "abcd" };vector<int> ival{ 1,2,3,0xffff,4,5,6,7,8,9,010 };auto p = find_if(ival.begin(), ival.end(), bind(strsize, _1, str));cout << *p << endl;auto q = find_if(ival.begin(), ival.end(), [str](string::size_type size) {return size == str.size(); });cout << *q << endl; } 10.4.2思考 #include<iostream> #include<vector> #include<iterator> #include<numeric> #include<xstddef> using namespace std; int main() {//位于iterator頭文件中istream_iterator<int> int_it(cin);istream_iterator<int> int_eof;//位于numeric頭文件中//第一次看懂仿函數哈哈//cout << accumulate(int_it, int_eof,// 0/*初值*/, // /*仿函數*/minus</*默認傳入迭代器右值類型*/>()/*這里默認使用plus<>()*/) << endl;//初始化輸入vector<int> vint2(int_it, int_eof);ostream_iterator<int> int_ot(cout, " ");for (auto it : vint2)*******++***++**++***int_ot++++++ = it;//*int_ot++=it; 此迭代器++,*等操作符不做任何事情,已看源碼,這些操作符的重載返回只是它本身//思考的原因:io流沒有<<或>>這個并沒有移動迭代器,迭代器只是模擬其他的迭代器保持統一的格式//but,這個東西沒有--因為這個符合io流的邏輯// cout << it << endl;copy(vint2.begin(), vint2.end(), int_ot);元素賦值//vector<int> vint;//while (int_it != int_eof)// vint.push_back(*int_it++);//for (auto it : vint)// cout << it << endl; }//10.29 #include<iostream> #include<vector> #include<iterator> #include<string> #include<fstream> using namespace std; int main() {ifstream filein("data");if (!filein)cerr << "無法讀取文件" << endl;string str1;//必須包含頭文件string,itreatoristream_iterator<string> str_it(filein); istream_iterator<string> eof;vector<string> vstr1(str_it, eof);ostream_iterator<string> str_ot(cout, "\n");for (auto t : vstr1)str_ot = t;filein.close(); }//10.30,10.31 #include<iostream> #include<vector> #include<iterator> #include<string> #include<algorithm> using namespace std; int main() {istream_iterator<int> int_it(cin);istream_iterator<int> int_eof;ostream_iterator<int> int_ot(cout, ",");vector<int> vint1(int_it, int_eof);sort(vint1.begin(), vint1.end(), greater<>());unique_copy(vint1.begin(), vint1.end(), int_ot); }//10.33 #include<iostream> #include<vector> #include<iterator> #include<string> #include<fstream> #include<algorithm> #include<functional> using namespace std; using namespace std::placeholders; using ostit = ostream_iterator<int>; using istit = istream_iterator<int>; void fenjiou(const int &ot, ostit &int_ot1, ostit &int_ot2) {if (ot & 1)int_ot1 = ot;elseint_ot2 = ot; } int main() {ifstream filein1("data1");if (!filein1){cerr << "無法讀取文件" << endl;exit(0);}istit int_it(filein1);istit int_eof;vector<int> vint(int_it, int_eof);ofstream fileout1("jishu");if (!fileout1){cerr << "無法讀取文件" << endl;exit(0);}ofstream fileout2("oushu");if (!fileout2){cerr << "無法讀取文件" << endl;exit(0);}ostit fileji_ot(fileout1," ");ostit fileou_ot(fileout2, " ");for_each(vint.begin(), vint.end(), bind(fenjiou, _1, fileji_ot, fileou_ot));filein1.close();fileout1.close();fileout2.close(); }總結
以上是生活随笔為你收集整理的C++Primer 第10章 bind与迭代器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的世界服务器怎么弄无限矿物,《我的世界
- 下一篇: C++ endl/ends/flush的