You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++17中将三个std::vector拷贝合并为临时单个vector的最简方法

有更简洁且性能更优的实现方式,核心可以借助标准库的std::copy接口配合std::back_inserter替代手写循环,还可以通过预分配内存减少扩容开销,完全满足不修改原vector、仅拷贝内容合并的需求。

方案1:统一处理逻辑(易维护,性能最优)

将所有待合并的源容器汇总后统一判断、计算大小、拷贝,避免重复代码,后续新增待合并容器时只需修改一处:

#include <algorithm> // 引入std::copy
#include <iterator>  // 引入std::back_inserter

// ... 你的其他业务代码
std::vector<COleDateTime> vecAssignmentDate;

// 汇总所有待查找的源map,后续新增合并源只需在此添加即可
const auto sourceMaps = {
    &m_mapHist[m_eHistAssign],
    &m_mapScheduleHist[m_eHistAssign],
    &m_mapScheduleFutureHist[m_eHistAssign]
};

// 第一步:预计算总元素数,提前申请内存,避免多次拷贝扩容带来的性能损耗
std::size_t totalSize = 0;
for (const auto& map : sourceMaps) {
    auto iter = map->find(strName);
    if (iter != map->end()) {
        totalSize += iter->second.size();
    }
}
vecAssignmentDate.reserve(totalSize);

// 第二步:批量拷贝所有存在的vector内容到目标容器
for (const auto& map : sourceMaps) {
    auto iter = map->find(strName);
    if (iter != map->end()) {
        std::copy(iter->second.begin(), iter->second.end(), std::back_inserter(vecAssignmentDate));
    }
}

方案2:极简写法(适合固定合并数量场景)

借助C++17的if初始化语句,代码更简洁,迭代器作用域也更干净:

#include <algorithm>
#include <iterator>

std::vector<COleDateTime> vecAssignmentDate;

if (auto it = m_mapHist[m_eHistAssign].find(strName); it != m_mapHist[m_eHistAssign].end()) {
    std::copy(it->second.begin(), it->second.end(), std::back_inserter(vecAssignmentDate));
}
if (auto it = m_mapScheduleHist[m_eHistAssign].find(strName); it != m_mapScheduleHist[m_eHistAssign].end()) {
    std::copy(it->second.begin(), it->second.end(), std::back_inserter(vecAssignmentDate));
}
if (auto it = m_mapScheduleFutureHist[m_eHistAssign].find(strName); it != m_mapScheduleFutureHist[m_eHistAssign].end()) {
    std::copy(it->second.begin(), it->second.end(), std::back_inserter(vecAssignmentDate));
}

两种方案都不会修改原有的三个vector,所有内容均为拷贝生成,符合你的使用要求。


内容的提问来源于stack exchange,提问作者Andrew Truckle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:15:03