10.26 back_inserter:创建一个使用push_back的迭代器 front_inserter:创建一个使用push_front的迭代器 inserter:创建一个使用Insert的迭代器,接受第二个参数,该参数必须是一个指向给定容器的迭代器,元素被插入到给定迭代器所表示的元素之前。
10.27
#include <iostream> #include <algorithm> #include <vector> #include <list> using namespace std; int main() { vector<int> ivec = {1, 2, 2, 3, 4, 5, 5, 6}; list<int> ilist; unique_copy(ivec.cbegin(), ivec.cend(), inserter(ilist, ilist.begin())); for (auto i : ilist) cout << i << " "; cout << endl; return 0; }10.28
#include <iostream> #include <algorithm> #include <vector> #include <list> using namespace std; int main() { vector<int> ivec = {1, 2, 3, 4, 5, 6, 7, 8, 9}; list<int> ils1, ils2, ils3; unique_copy(ivec.cbegin(), ivec.cend(), back_inserter(ils1)); for (auto i : ils1) cout << i << " "; cout << endl; unique_copy(ivec.cbegin(), ivec.cend(), front_inserter(ils2)); for (auto i : ils2) cout << i << " "; cout << endl; unique_copy(ivec.cbegin(), ivec.cend(), inserter(ils3, ils3.begin())); for (auto i : ils3) cout << i << " "; cout << endl; return 0; }10.29
#include <iostream> #include <algorithm> #include <vector> #include <fstream> #include <iterator> using namespace std; int main(int argc, char *argv[]) { vector<string> text; ifstream in(argv[1]); istream_iterator<string> in_iter(in), end; while (in_iter != end) { text.push_back(*in_iter++); } for (auto s : text) cout << s << " "; cout << endl; return 0; }10.30
#include <iostream> #include <iterator> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> ivec; istream_iterator<int> in_iter(cin), end; ostream_iterator<int> out_iter(cout, " "); while (in_iter != end) ivec.push_back(*in_iter++); sort(ivec.begin(), ivec.end()); copy(ivec.cbegin(), ivec.cend(), out_iter); cout << endl; return 0; }10.31 将上题种的copy改成unique_copy即可。
10.32
#include <algorithm> #include <iterator> #include "Sales_data.h" using namespace std; int main() { vector<Sales_data> record; istream_iterator<Sales_data> in_iter(cin), end; ostream_iterator<Sales_data> out_iter(cout, "\n"); while (in_iter != end) record.push_back(*in_iter++); sort(record.begin(), record.end(), compareIsbn); auto beg = record.begin(); while (beg != record.end()) { auto item = *beg; auto r = find_if(beg + 1, record.end(), [item](const Sales_data &item1) { return item1.isbn() != item.isbn(); }); auto sum = accumulate(beg + 1, r, item); *out_iter++ = sum; beg = r; } return 0; }10.33
#include <iostream> #include <fstream> #include <iterator> using namespace std; int main(int argc, char *argv[]) { ifstream in(argv[1]); ofstream odd(argv[2]), even(argv[3]); istream_iterator<int> in_iter(in), end; ostream_iterator<int> odd_iter(odd, " "), even_iter(even, "\n"); while (in_iter != end) { if (*in_iter % 2 == 0) *even_iter++ = *in_iter; else *odd_iter++ = *in_iter; ++in_iter; } return 0; }