首页 > 技术文章 > 【C++】 vector 的合并

nntzhc 2020-11-26 15:22 原文

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

 

推荐阅读