10.26
back_inserter调用push_back,总是插入到容器的尾元素之后的位置。
front_inserter调用push_front,总是插入到容器首元素之前
inserter调用insert,插入到给定位置之前
综上,使用front_inserter向容器插入一些元素,元素最终在容器中的顺序与插入顺序相反,但其余俩个不会
10.27
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
void output_words(const vector<string> &words)
{
for(auto iter = words.begin(); iter != words.end(); ++iter)
cout << *iter << " " ;
cout << endl;
}
void fuc(vector<string> &words)
{
sort(words.begin(), words.end());
cout << "排好序的words" << output_words(words) ;
vector<string> v;
unique_copy(words.begin(), words.end(), v.begin()); // 吧v.begin()换成back_inserter(v);
cout << "拷贝完的words" << output_words(v) ;
}
int main(int argc, char*argv[])
{
ifstream in(argv[1]);
if (!in)
{
cerr << "无法打开文件" << endl;
exit(1);
}
string word;
vector<string> words;
while(in>>word)
words.push_back(word);
cout << "最初的words" << output_words(words);
fuc(words);
return 0;
}
答案
unique_copy也要求重复的元素是相邻存放的,因此先要用sort排序或手工排序后
#include <iostream>
#include <vector>
#include <list>
#include <algorithm>
using namespace std;
int main(int argc, char *argv[])
{
vector<int> vi = {1, 2, 2, 3, 4, 5, 5, 6};
list<int> li;
unique_copy(vi.begin(), vi.end(), back_inserter(li));
for (auto v: li)
cout << v << " ";
cout << endl;
return 0;
}
10.28
估计
inserter:123456789
back_inserter:123456789
front_inserter:987654321
答案
#include <iostream>
#include <vector>
#include <list>
#include <algorithm>
using namespace std;
int main(int argc, char *argv[])
{
vector<int> vi = {1, 2, 3, 4, 5, 6 ,7, 8, 9};
list<int>lis1,lis2, lis3;
unique_copy(vi.begin(), vi.end(), inserter(lis1,lis1.begin()));
for(auto v : lis1)
cout << v << " " ;
cout <<endl;
unique_copy(vi.begin(), vi.end(), front_inserter(lis2));
for(auto v: lis2)
cout << v << " " ;
cout <<endl;
unique_copy(vi.begin(), vi.end(), back_inserter(lis3));
for(auto v: lis3)
cout << v << " " ;
cout <<endl;
return 0;
}