这篇文章将讨论如何在 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的全部内容。