c++primer 第五版 p205 22题详细解释
生活随笔
收集整理的這篇文章主要介紹了
c++primer 第五版 p205 22题详细解释
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題:遍歷vector對象的前一半元素,如果等于some_val,那么在這個元素之前插入它本身的2倍,如果這個元素不等于some_val,那么不做插入操作。
解法1說明:
iter:當插入元素后,iter失敗,所以iter需要用insert返回值賦值,然后自增2次后可以指向插入元素之前iter所指的元素的后一個元素位置,如果不插入元素,那么直接把iter自增一次即可。
mid:對于mid元素而言。插入元素后,mid的迭代器同樣失效,但是此時mid即是之前mid所指的元素的iter在加上新增加元素的個數。
? #include <iostream> #include <string> #include <vector> #include <deque> #include <list> #include <forward_list> #include <string> #include <array> using namespace std; #define LENGTH 10 typedef int TYPE; typedef vector<TYPE> VECTORTYPE; typedef deque<TYPE> DEQUETYPE; typedef list<TYPE> LISTTYPE; typedef forward_list<TYPE> FORWARD_LISTTYPE; typedef array<TYPE,LENGTH> ARRAYTYPE; void print(VECTORTYPE & ); void print(DEQUETYPE & ); void print(LISTTYPE & ); void print(FORWARD_LISTTYPE & ); void print(ARRAYTYPE & ); void print(string &); void pluralize(size_t ,string &); void print(list<string> &); void print(vector<string> &); int main() {vector<int> v(10,1);print(v);int some_val = 1;vector<int>::iterator mid = v.begin() + v.size() / 2;vector<int>::iterator iter = v.begin();int org_size = v.size(),new_ele = 0;while(iter != (v.begin() + org_size / 2 + new_ele)){if(*iter == some_val){iter = v.insert(iter,2 * some_val);++ iter;++ iter;++ new_ele;}else++ iter;}print(v); return 0; } void print(VECTORTYPE &vec) {for(VECTORTYPE::iterator i = vec.begin() ; i != vec.end() ; ++i){ cout << *i << " ";}cout << endl;return ; }void print(DEQUETYPE &vec) {for(DEQUETYPE::iterator i = vec.begin() ; i != vec.end() ; ++i){ cout << *i << " ";}cout << endl;return ; }void print(LISTTYPE &vec) {for(LISTTYPE::iterator i = vec.begin() ; i != vec.end() ; ++i){ cout << *i << " ";}cout << endl;return ; }void print(FORWARD_LISTTYPE &vec) {for(FORWARD_LISTTYPE::iterator i = vec.begin() ; i != vec.end() ; ++i){ cout << *i << " ";}cout << endl;return ; }void print(ARRAYTYPE &vec) {for(ARRAYTYPE::iterator i = vec.begin() ; i != vec.end() ; ++i){ cout << *i << " ";}cout << endl;return ; }void print(string & s_vec) {for(string::iterator i = s_vec.begin(); i != s_vec.end() ; ++i) {cout << *i << " ";}cout << endl; } void pluralize(size_t cnt,string &word) {if(cnt > 1)word.push_back('s');//equal to word += 's' }void print(vector<string> & s_vec) {for(auto &i :s_vec)cout << i << " ";cout << endl; } void print(list<string> & s_list) {for(auto & i: s_list)cout << i << " ";cout << endl; }方法2:本題iter需要遍歷的元素個數是固定的,也就是vector對象元素個數的一半。所以,有下面的程序:
#include <iostream> #include <string> #include <vector> #include <deque> #include <list> #include <forward_list> #include <string> #include <array>using namespace std;#define LENGTH 10 typedef int TYPE; typedef vector<TYPE> VECTORTYPE; typedef deque<TYPE> DEQUETYPE; typedef list<TYPE> LISTTYPE; typedef forward_list<TYPE> FORWARD_LISTTYPE; typedef array<TYPE,LENGTH> ARRAYTYPE; void print(VECTORTYPE & ); void print(DEQUETYPE & ); void print(LISTTYPE & ); void print(FORWARD_LISTTYPE & ); void print(ARRAYTYPE & ); void print(string &); void pluralize(size_t ,string &); void print(list<string> &); void print(vector<string> &); int main() {vector<int> iv{1,1,1,1,1};int some_val = 1;vector<int>::iterator iter = iv.begin();int org_size = iv.size(),i = 0;//use the loop variables to control the loop times while(i <= org_size / 2 ){if(*iter == some_val){iter = iv.insert(iter,2 * some_val);iter ++ ,iter ++;}elseiter ++;i ++;}for (iter = iv.begin(); iter != iv.end() ; ++ iter){cout << * iter << endl;} return 0; } void print(VECTORTYPE &vec) {for(VECTORTYPE::iterator i = vec.begin() ; i != vec.end() ; ++i){ cout << *i << " ";}cout << endl;return ; }void print(DEQUETYPE &vec) {for(DEQUETYPE::iterator i = vec.begin() ; i != vec.end() ; ++i){ cout << *i << " ";}cout << endl;return ; }void print(LISTTYPE &vec) {for(LISTTYPE::iterator i = vec.begin() ; i != vec.end() ; ++i){ cout << *i << " ";}cout << endl;return ; }void print(FORWARD_LISTTYPE &vec) {for(FORWARD_LISTTYPE::iterator i = vec.begin() ; i != vec.end() ; ++i){ cout << *i << " ";}cout << endl;return ; }void print(ARRAYTYPE &vec) {for(ARRAYTYPE::iterator i = vec.begin() ; i != vec.end() ; ++i){ cout << *i << " ";}cout << endl;return ; }void print(string & s_vec) {for(string::iterator i = s_vec.begin(); i != s_vec.end() ; ++i) {cout << *i << " ";}cout << endl; } void pluralize(size_t cnt,string &word) {if(cnt > 1)word.push_back('s');//equal to word += 's' }void print(vector<string> & s_vec) {for(auto &i :s_vec)cout << i << " ";cout << endl; } void print(list<string> & s_list) {for(auto & i: s_list)cout << i << " ";cout << endl; }?
總結
以上是生活随笔為你收集整理的c++primer 第五版 p205 22题详细解释的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql触发器学习的一个小错误
- 下一篇: c++primer第五版,p134页第2