C++中如何高效拼接两个vector

在C++编程中,vector是一种常用的数据结构,它代表了一个可以动态改变大小的数组。在实际开发中,经常需要将两个vector拼接在一起,形成一个新的vector。本文将详细介绍如何在C++中拼接两个vector,并探讨不同方法的性能差异。

一、使用insert成员函数

C++ STL中的vector提供了insert成员函数,可以用来在指定位置前插入另一个容器的全部或部分元素。这是拼接两个vector的一种直观方法。

示例代码


#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec1 = {1, 2, 3};
    std::vector<int> vec2 = {4, 5, 6};

    // 在vec1的末尾插入vec2的所有元素
    vec1.insert(vec1.end(), vec2.begin(), vec2.end());

    // 输出结果
    for (int num : vec1) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

输出

1 2 3 4 5 6

性能分析

使用insert函数进行拼接时,如果vector需要扩展容量,可能会导致内存重新分配和数据复制,从而影响性能。不过,在大多数现代C++实现中,vector的内存分配策略已经相当优化,对于不是极端频繁的操作,这种性能影响通常可以忽略。

二、使用push_back和迭代器

另一种拼接vector的方法是遍历第二个vector,并使用push_back函数将其元素逐个添加到第一个vector的末尾。

示例代码

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec1 = {1, 2, 3};
    std::vector<int> vec2 = {4, 5, 6};

    // 遍历vec2,将每个元素添加到vec1的末尾
    for (auto it = vec2.begin(); it != vec2.end(); ++it) {
        vec1.push_back(*it);
    }

    // 输出结果
    for (int num : vec1) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

三、使用reserve优化性能

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec1 = {1, 2, 3};
    std::vector<int> vec2 = {4, 5, 6};

    // 预分配足够的内存空间
    vec1.reserve(vec1.size() + vec2.size());

    // 使用push_back拼接
    for (auto it = vec2.begin(); it != vec2.end(); ++it) {
        vec1.push_back(*it);
    }

    // 输出结果
    for (int num : vec1) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

四、使用C++11的std::vector::emplace_back


#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec1 = {1, 2, 3};
    std::vector<int> vec2 = {4, 5, 6};

    vec1.reserve(vec1.size() + vec2.size());

    // 使用emplace_back拼接
    for (auto it = vec2.begin(); it != vec2.end(); ++it) {
        vec1.emplace_back(*it);
    }

    // 输出结果
    for (int num : vec1) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

总结

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值