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;
}