C++ vector 的合併
阿新 • • 發佈:2020-11-26
insert比較好用,merge需要考慮size足夠和大小排序。
兩個 vector 怎麼合併?_cau_eric的專欄-CSDN部落格_vector合併
vector的insert方式:(以下為將vec1和vec2的內容合併到vec3中)
vector<string>vec1,vec2,vec3; //... vec1,vec2賦值 vec3.insert(vec3.end(),vec1.begin(),vec1.end()); vec3.insert(vec3.end(),vec2.begin(),vec2.end());
merge方式:
vector<string>vec1,vec2,vec3; //... vec1,vec2賦值 sort(vec1.begin(),vec1.end()); sort(vec2.begin(),vec2.end()); vec3.resize(vec1.size()+vec2.size()); merge(vec1.begin(),vec1.end(),vec2.begin(),vec2.end(),vec3.begin());
merge方式要注意三點:
1、vec1,和vec2需要經過排序,merge只能合併排序後的集合,不然會報錯。
2、vec3需要指定好大小,不然會報錯。
3、merge的時候指定vec3的位置一定要從begin開始,如果指定了end,它會認為沒有空間,當然,中間的位置我沒有試,回頭有空試一下。
題目:輸入一個整數陣列,實現一個函式來調整該陣列中數字的順序,使得所有的奇數位於陣列的前半部分,所有的偶數位於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。
解法:
class Solution { public: void reOrderArray(vector<int> &array) { int length = array.size(); int index = 0; vector<int> singles; vector<int> doubles; vector<int> ret; for(index = 0;index<length;index++) { if((array[index] & 1) != 0) singles.push_back(array[index]); else doubles.push_back(array[index]); } ret.insert(ret.end(), singles.begin(),singles.end()); ret.insert(ret.end(), doubles.begin(),doubles.end()); array=ret; } };