将旧向量设置为新向量

Setting an old vector equal to a new vector

假设我正在制作 class:

#import <vector>

class Example {
    std::vector<float> v;

    public:
        Example(std::vector<float>);
};

如何将现有向量 v 设置为等于通过构造函数传递的向量?有什么 "accepted" 方法可以做到这一点吗?

我考虑过循环,然后添加它们..但似乎 "forced"。

#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::Example(const std::vector<float>& u) 
: v(u)
{ }

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

如果你坚持不只是复制 vector,这绝对是最有效的方法,那么 vector 也有一个 insert 方法,它接受一个范围(第四次超载):

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

C++11 提供了 最佳 方法来执行此操作,如果您想使用要传递给 Examplestd::vector,如您不想分配和复制到新的 std::vector。这称为 move constructor:

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);

A copy constructor 用于复制参数:

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;