📅  最后修改于: 2023-12-03 15:07:37.808000             🧑  作者: Mango
在 C++ 中,我们可以使用 std::vector
类型来表示一个动态数组。有时候我们需要将向量的一部分复制到另一个向量中。本文将介绍如何在 C++ 中实现此操作。
std::copy
是 STL 中的一个算法,可以将一个序列复制到另一个序列中。我们可以使用 std::copy
将一个向量的一部分复制到另一个向量中。以下是一个示例代码:
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> vec1 = {1, 2, 3, 4, 5, 6, 7};
std::vector<int> vec2(5);
// Copy vec1[2] to vec1[6] to vec2[0] to vec2[4]
std::copy(vec1.begin() + 2, vec1.begin() + 7, vec2.begin());
// Print vec2
for (auto x : vec2)
std::cout << x << " ";
return 0;
}
代码执行后,输出结果为:
3 4 5 6 7
在上面的示例代码中,向量 vec1
中的元素从第 2 个到第 6 个共 5 个元素被复制到向量 vec2
中,从第 0 个位置开始存放。
我们可以将 std::copy
的返回值与向量的 begin
相加,以快速获得复制数据的结束位置,如下所示:
// Copy vec1[2] to vec1[6] to vec2[0] to vec2[4]
auto end = std::copy(vec1.begin() + 2, vec1.begin() + 7, vec2.begin());
// Print copied elements
std::for_each(vec2.begin(), end, [](int& x) { std::cout << x << " "; });
向量类 std::vector
重载了 operator[]
,可以通过索引访问向量元素。我们可以通过 std::vector
的迭代器来复制向量的一部分到另一个向量中。以下是一个示例代码:
#include <iostream>
#include <vector>
int main()
{
std::vector<int> vec1 = {1, 2, 3, 4, 5, 6, 7};
std::vector<int> vec2(5);
// Copy vec1[2] to vec1[6] to vec2[0] to vec2[4]
auto j = 0;
for (auto i = vec1.begin() + 2; i != vec1.begin() + 7; ++i, ++j)
vec2[j] = *i;
// Print vec2
for (auto x : vec2)
std::cout << x << " ";
return 0;
}
代码执行后,输出结果为:
3 4 5 6 7
在上面的示例代码中,我们使用了两个迭代器,其中一个迭代器指向要复制的向量的第一个元素,另一个迭代器指向要存储数据的向量的第一个位置。然后我们可以使用 for 循环逐个复制元素,直到复制完指定的元素。
需要注意的是,在使用这种方法时,要保证存储数据的向量的大小足够存储要复制的数据。
在 C++ 中,我们可以使用 std::copy
函数或向量的迭代器将向量的一部分复制到另一个向量中。使用 std::copy
函数更加简洁,但向量的迭代器可以更好地掌握复制过程的细节。
无论选用哪种方法,请保证存储数据的向量的大小足够存储要复制的数据。