知方号

知方号

在 C++ 中复制向量<一个vector赋值给另一个vector>

这篇文章将讨论如何在 C++ 中复制Vector。复制Vector包括使用原始Vector中每个元素的副本并以相同的顺序构造一个新Vector。

1.使用复制构造函数

推荐的方法是使用复制构造函数,它在内部负责所有复制。

123456templatestd::vector create_copy(std::vector const &vec){    std::vector v(vec);    return v;}

下载  运行代码

 我们还可以为此使用范围构造函数:

123456templatestd::vector create_copy(std::vector const &vec){    std::vector v(vec.begin(), vec.end());    return v;}2.使用 vector::operator=

这里的想法是创建一个空Vector并使用它的成员函数 operator= 用于将给定Vector的所有元素复制到它。

12345678templatestd::vector create_copy(std::vector const &vec){    std::vector v;    v = vec;     return v;}

下载  运行代码

 我们知道,在 C++ 中,默认情况下,对象是按值传递给函数的。这意味着如果对象按值传递,Stack栈将创建整个对象的副本。我们可以利用这个事实,强制拷贝一个vector,如下图:

1234templatestd::vector create_copy(std::vector const vec) {    // 注意:没有引用    return vec;}3.使用 std::copy 功能

复制的标准算法是 std::copy.我们可以使用它来将元素从源Vector复制到目标Vector。但是要确保目标Vector有足够的空间来容纳源序列的所有元素。

1234567templatestd::vector create_copy(std::vector const &vec){    std::vector v(vec.size());    std::copy(vec.begin(), vec.end(), v.begin());    return v;}

下载  运行代码

 如果目标Vector没有足够的空间进行复制,最好使用 std::back_insert 迭代器,它将调用 vector::push_back 在目标Vector上,如下图所示:

1234567templatestd::vector create_copy(std::vector const &vec){    std::vector v;    std::copy(vec.begin(), vec.end(), back_inserter(v));    return v;}

下载  运行代码

4.使用 vector::insert 功能

Vector类有一个标准功能, insert(),可以插入指定范围内的元素。

12345678templatestd::vector create_copy(std::vector const &vec){    std::vector v;    v.insert(v.begin(), vec.begin(), vec.end());     return v;}

下载  运行代码

5.使用 vector::assign 功能

这是使用公共成员函数的另一种解决方案 assign() Vector类,它将Vector内容替换为指定范围的内容。

12345678templatestd::vector create_copy(std::vector const &vec){    std::vector v;    v.assign(vec.begin(), vec.end());     return v;}

下载  运行代码

6.使用 vector::push_back 功能

最后,我们可以调用 vector::push_back 使用基于范围的 for 循环对给定Vector中的每个元素。简单而高效。

12345678910templatestd::vector create_copy(std::vector const &vec){    std::vector v;    for (T const &e: vec) {        v.push_back(e);    }     return v;}

下载  运行代码

 重要的提示:

请注意,上述所有解决方案都对Vector对象执行浅拷贝。 C++ 不提供任何用于执行深拷贝的实用函数。如果需要深拷贝,我们可以编写自己的例程,遍历Vector并手动将引用复制到其他对象。

这就是在 C++ 中复制Vector的全部内容。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。