1. 程式人生 > 實用技巧 >C++ vector 的合併

C++ vector 的合併

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