将旧向量设置为新向量
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 提供了 最佳 方法来执行此操作,如果您想使用要传递给 Example
的 std::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;
假设我正在制作 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 提供了 最佳 方法来执行此操作,如果您想使用要传递给 Example
的 std::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;