【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;
    }
};
复制代码

 

posted @   nntzhc  阅读(6599)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示