📜  在 C++ 中将向量的一部分复制到另一个向量中(1)

📅  最后修改于: 2023-12-03 15:07:37.808000             🧑  作者: Mango

在 C++ 中将向量的一部分复制到另一个向量中

在 C++ 中,我们可以使用 std::vector 类型来表示一个动态数组。有时候我们需要将向量的一部分复制到另一个向量中。本文将介绍如何在 C++ 中实现此操作。

方法一:使用 std::copy

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 的迭代器

向量类 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 函数更加简洁,但向量的迭代器可以更好地掌握复制过程的细节。

无论选用哪种方法,请保证存储数据的向量的大小足够存储要复制的数据。