9.18 - 9.22
//***********9.3.1节练习 9.18************** string temp; deque<string> sdeq;//默认初始化 while (cin >> temp) { sdeq.push_back(temp); } for (auto i = sdeq.cbegin(); i != sdeq.cend(); ++i) cout << *i << endl; //***********9.19************************ list<string> slist; string temp1; while (cin >> temp1) { slist.push_back(temp1); } for (auto i = slist.cbegin(); i != slist.cend(); ++i) cout << *i << endl; //故和上一个练习相比,并无太多改动 //*************9.20*********************** list<int> ilist; for (int i = 0; i != 10; ++i) { ilist.push_back(i); } deque<int> odddeq,evendeq; for (auto i = ilist.cbegin(); i != ilist.cend(); ++i) { if (*i & 1 )//用逻辑位与运算,和%2等价 odddeq.push_back(*i); else evendeq.push_back(*i); } //**************9.21********************** vector<string> svec; string word; auto iter = svec.begin(); while (cin >> word) { iter = svec.insert(iter, word); } for (auto i : svec) cout << i << endl; //此操作相当于一直push_front,从而元素是倒序的 std::system("pause"); return 0;
//*****************9.22练习*********************** //目的是检查,前一半元素中如果有和some_val相等的元素的,就在他前面插入一个2*some_val //而错误程序是,当插入元素时,原本的迭代器会失效,所以我们要更新这个mid,让他始终在最初始的位置 vector<int> test = { 1, 2, 1, 3, 1, 5, 2, 1, 4, 1 }; for (auto i : test) { cout << i << " "; } cout << endl; int some_val = 1; int newsum = 0;//用来记录插入的新元素的个数 size_t org_size = test.size(); vector<int>::iterator iter = test.begin(); while (iter != test.begin() + org_size / 2 + newsum)// !=后面是新的mid位置 { if (*iter == some_val) { iter = test.insert(iter, 2 * some_val); iter += 2; newsum++; } else iter++; } for (auto i : test) { cout << i << " "; } cout << endl; std::system("pause"); return 0;
来源:https://www.cnblogs.com/Kanna/p/12268433.html