将旧向量设置为等于新向量

Setting an old vector equal to a new vector

本文关键字:向量 于新 设置      更新时间:2023-10-16

假设我正在制作一个类:

#import <vector>
class Example {
    std::vector<float> v;
    public:
        Example(std::vector<float>);
};

如何将现有向量 v 设置为等于通过构造函数传递的向量?是否有一些"被接受"的方法可以做到这一点?

我考虑过循环,只是添加它们......但它似乎是"被迫的"。

#import "Example.h"
Example::Example(std::vector<float> u) {
    //or however a vector iterates! :-)
    for (int i = 0; i < u.size; ++i)
        this->v.push_back(u.at(i));
}

有没有更好的方法可以做到这一点?

如果您想使用要传递到Example std::vector,则 C++11 提供了执行此操作的最佳方法,例如您不想分配和复制到新std::vector。这称为移动构造函数:

class Example {
    std::vector<float> _v;
public:
    Example(std::vector<float>&& v) : _v(std::move(v)) {}
};

在你的代码中,你可以像这样强制调用它:

std::vector<float> foo{4.0, 8.0, 15.0, 16.0, 23.0, 42.0};
Example bar = std::move(foo);

当您想要创建参数的副本时,将使用复制构造函数:

class Example {
    std::vector<float> _v;
public:
    Example(const std::vector<float>& v) : _v(v) {}
};

并且可以像这样使用:

std::vector<float> foo{4.0, 8.0, 15.0, 16.0, 23.0, 42.0};
Example bar = foo;

只需使用复制构造函数:

Example::Example(const std::vector<float>& u) 
: v(u)
{ }

请注意,我是通过引用 const 而不是值来u获取的。

如果你坚持不只是复制vector,这绝对是最有效的方法,那么vector还有一个insert方法,它需要一个范围(第 4 个重载):

Example::Example(const std::vector<float>& u) 
{
    v.insert(v.end(), u.begin(), u.end());
}