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