vector合并
时间: 2025-03-11 19:08:12 浏览: 89
### C++ 中合并两个 `vector` 的方法
在 C++ 中有多种方式可以有效地合并两个 `std::vector` 容器。以下是几种常见且高效的实现方案:
#### 方法一:使用 `insert`
利用 `std::vector` 提供的成员函数 `insert()` 可以非常方便地将一个容器的内容插入到另一个容器中指定位置。
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec1 = {1, 2, 3};
std::vector<int> vec2 = {4, 5, 6};
// 将vec2的所有元素插入到vec1的末尾
vec1.insert(vec1.end(), vec2.begin(), vec2.end());
for (const auto& elem : vec1) {
std::cout << elem << " ";
}
}
```
这种方法不仅简洁明了,而且性能较高[^1]。
#### 方法二:使用标准库算法 `merge`
当需要保持合并后的序列有序时,可选用 `<algorithm>` 头文件里的 `std::merge` 函数来进行操作。此方法适用于已排序的输入序列,并能保证输出也是按升序排列的结果集。
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec1 = {1, 3, 5};
std::vector<int> vec2 = {2, 4, 6};
// 对原数组先做一次预处理使其成为有序状态
std::sort(vec1.begin(), vec1.end());
std::sort(vec2.begin(), vec2.end());
// 创建一个新的向量用于存储合并结果
std::vector<int> mergedVec;
mergedVec.reserve(vec1.size() + vec2.size()); // 预留空间提高效率
// 执行合并动作
std::merge(vec1.begin(), vec1.end(),
vec2.begin(), vec2.end(),
std::back_inserter(mergedVec));
for (const auto& elem : mergedVec) {
std::cout << elem << " ";
}
return 0;
}
```
需要注意的是,在应用 `std::merge` 前应确保待合并的数据已经是经过排序的状态;另外还需注意内存分配策略的选择以优化程序运行表现[^2]。
#### 方法三:基于自定义逻辑的手动遍历与追加
对于某些特定场景下的需求(比如只保留唯一项),可以通过编写简单的循环语句逐一遍历源集合并将符合条件的新条目加入目标列表之中。
```cpp
#include <iostream>
#include <vector>
#include <unordered_set>
int main() {
std::vector<int> vec1 = {1, 2, 3};
std::vector<int> vec2 = {3, 4, 5};
std::unordered_set<int> seen;
// 使用set去重机制构建最终结果
for (auto&& v : vec1){
seen.emplace(v);
}
for (auto&& v : vec2){
seen.emplace(v);
}
std::vector<int> result(seen.begin(),seen.end());
for(const auto &item:result){
std::cout<< item <<" ";
}
}
```
上述例子展示了如何通过哈希表 (`std::unordered_set`) 来过滤重复元素并生成无冗余版本的目标 `vector`[^3]。
阅读全文
相关推荐


















