作为构造参数传入的向量

Vectors passed in as construction arguments

本文关键字:向量 参数      更新时间:2023-10-16

如果我有一个类似的类:

namespace Matrix {
class Matrix; 
class Vector {
public:
//i want to create a vector the same size as contents with the same values
Vector(const std::vector<ValueType>& contents);
private:
std::vector<ValueType> contents;
}

当内容通过构造函数传入时,它是否会自动复制到我在类中定义的名为内容的向量?还是在构造函数定义中我必须做些什么才能实现这一目标?

不,您不会仅仅因为构造函数具有参数而获得自动复制。你可以这样写:

Vector(const std::vector<ValueType>& contents_) : contents{contents_} { };

这将进行复制。但是,由于两个原因,这整个方法不是一个好主意:

  1. 如果你将右值传递给构造函数(例如,你从某个函数获得的临时向量),const &会创建一个额外的副本。
  2. 为什么只愿意从 std::vector 初始化数据?您应该愿意至少接受一个 std::span,或者一个容器或一对迭代器上的模板。
  3. 实际上,我会考虑在底层容器上模板化整个内部向量类。