两个vector的拼接
时间: 2023-12-23 08:04:37 浏览: 254
可以使用`std::vector`的`insert`方法来实现两个vector的拼接。具体步骤如下:
1. 创建一个新的vector,作为两个原始vector的拼接结果。
2. 使用`std::vector`的`insert`方法将第二个vector中的所有元素插入到新vector的末尾。
3. 使用`std::vector`的`insert`方法将第一个vector中的所有元素插入到新vector的末尾。
以下是示例代码:
```c++
#include <iostream>
#include <vector>
int main() {
std::vector<int> v1 = {1, 2, 3};
std::vector<int> v2 = {4, 5, 6};
// 创建新的vector
std::vector<int> v3;
// 将v2中的元素插入到v3末尾
v3.insert(v3.end(), v2.begin(), v2.end());
// 将v1中的元素插入到v3末尾
v3.insert(v3.end(), v1.begin(), v1.end());
// 输出结果
for (int i : v3) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
```
输出结果为:
```
4 5 6 1 2 3
```
相关问题
c++拼接两个vector
在 C++ 中,你可以通过多种方式来拼接两个 `std::vector` 。下面是几种常见的方法及其说明:
### 方法一:使用 `insert`
这是最直观的方式之一。假设我们有两个向量 `vec1` 和 `vec2` ,我们可以直接将第二个向量的所有元素插入到第一个向量的末尾。
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec1 = {1, 2, 3};
std::vector<int> vec2 = {4, 5, 6};
// 使用 insert 函数把 vec2 的内容添加到 vec1 的结尾
vec1.insert(vec1.end(), vec2.begin(), vec2.end());
for (auto& elem : vec1) {
std::cout << elem << " ";
}
}
```
这种方法非常高效并且易于理解。
### 方法二:使用 `assign` 或者构造新 vector 并拷贝
如果你想创建一个新的向量而不是修改现有的,那么你可以这样做:
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec1 = {1, 2, 3};
std::vector<int> vec2 = {4, 5, 6};
// 创建一个新的向量并将两者合并
std::vector<int> combinedVec;
combinedVec.reserve(vec1.size() + vec2.size()); // 预分配空间以避免多次内存分配
combinedVec.assign(vec1.begin(), vec1.end());
combinedVec.insert(combinedVec.end(), vec2.begin(), vec2.end());
for (auto& elem : combinedVec) {
std::cout << elem << " ";
}
}
```
这里的关键在于预分配足够的存储空间给新的向量 (`reserve`) 来保证性能最优。
### 方法三:利用算法库中的 `copy_n`
如果你喜欢 STL 提供的标准算法风格编码的话,也可以试试这个办法:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec1 = {1, 2, 3};
std::vector<int> vec2 = {4, 5, 6};
// 把 vec2 的所有元素复制到最后面去
std::copy(vec2.begin(), vec2.end(), std::back_inserter(vec1));
for (auto& elem : vec1) {
std::cout << elem << " ";
}
}
```
这里的 `std::back_inserter()` 可以为容器动态地增加容量并在末端插入新值。
无论哪种方式都可以很好地解决问题,具体选择取决于个人偏好及项目需求。通常来说第一种是最简单且效率较高的解决方案。
c++中两个vector存储各种的彩色图像数据,每个vector里面每10张彩色图像进行竖着拼接,然后两个vector竖着拼接的图像在水平拼接为一张彩色大图
可以使用OpenCV库来完成这个任务。首先,将两个vector中的图像读入到OpenCV的Mat对象中,然后使用vconcat()函数将每个vector中的10张图像竖着拼接成一张大图像。接着,使用hconcat()函数将两个大图像水平拼接在一起,最终得到一张彩色大图。
具体代码如下:
```c++
#include <opencv2/opencv.hpp>
#include <vector>
using namespace cv;
using namespace std;
int main()
{
// 读入两个vector中的图像
vector<Mat> img_vec1, img_vec2;
for (int i = 0; i < 100; i++)
{
Mat img = imread("img_" + to_string(i) + ".jpg");
img_vec1.push_back(img);
}
for (int i = 0; i < 100; i++)
{
Mat img = imread("img_" + to_string(i+100) + ".jpg");
img_vec2.push_back(img);
}
// 竖着拼接每个vector中的10张图像
vector<Mat> img_vec1_v, img_vec2_v;
for (int i = 0; i < 10; i++)
{
vector<Mat> row_vec1, row_vec2;
for (int j = 0; j < 10; j++)
{
row_vec1.push_back(img_vec1[i*10+j]);
row_vec2.push_back(img_vec2[i*10+j]);
}
Mat row_img1, row_img2;
vconcat(row_vec1, row_img1);
vconcat(row_vec2, row_img2);
img_vec1_v.push_back(row_img1);
img_vec2_v.push_back(row_img2);
}
// 竖着拼接两个vector中的大图像
Mat img1_v, img2_v;
vconcat(img_vec1_v, img1_v);
vconcat(img_vec2_v, img2_v);
// 水平拼接两个大图像
Mat img;
hconcat(img1_v, img2_v, img);
// 显示结果
namedWindow("result", WINDOW_NORMAL);
imshow("result", img);
waitKey(0);
return 0;
}
```
阅读全文
相关推荐
















