将旧向量设置为等于新向量
Setting an old vector equal to a new vector
假设我正在制作一个类:
#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());
}
相关文章:
- C++11 迭代向量的新方法?
- 对对应于矩阵的行和列的对向量进行排序
- 如何将元素从向量转移到新数组?
- C++:添加新结构时,结构指针向量中的所有元素都会更新
- 为什么同时覆盖全局新运算符和特定于类的运算符不是模棱两可的行为?
- C++ 将地址保存为字符串的向量转换为新的向量
- 在功能块中使用新运算符时存在于堆或堆栈上?
- 如何泛化作用于不同类型的向量的函数?
- 在新作用域中使用unique_lock是否等效于在使用共享资源的工作结束时解锁调用
- C++对包含新指针的向量的分配
- 为什么要使用带有C++"向量"的新调用?
- 使用 C++ 中的向量在新行上显示文本文件中的列
- 常量字符* 向量的新值没有得到 push_back()
- C++ 变量未正确从向量接收新值
- 方法向量的新/分配的复杂性::p ush_back
- C等价于新对象(构造函数)
- 将所有数组复制到没有C++向量的新数组中
- C++ 奇怪的情况,例如将现有变量应用于新变量
- 如何使用 STL 的 copy() 从现有向量创建新向量?
- 向c++向量添加新字段