这取决于你想在课堂上做什么,但我建议:
double getAt(size_t index) const { return data_.at(index); }
void setAt(size_t index, double value) { data_.at(index) = value; }
这样做的好处是您可以更改类的内部实现,例如使用不同的 STL 容器,并且您不需要更改接口。请注意,吸气剂是const
.
如果性能很关键并且您信任调用者,那么您可以省略边界检查:
double getAt(size_t index) const { return data_[index]; }
void setAt(size_t index, double value) { data_[index] = value; }
但是能够设置整个向量并且您不介意公开实现可能很有用,在这种情况下您可能需要类似的东西:
void setData(std::vector<double> data) { data_ = std::move(data); }
请注意,setData
按值获取向量并将其移动到私有成员变量中,这意味着如果调用者传递一个右值,则不会进行复制。
如果您需要获取整个向量,您可以选择。如果向量不是太大,性能并不重要,或者无论如何您都需要复制,那么按值返回就可以了,这将是我的首选:
std::vector<double> getData() const { return data_; }
否则通过引用返回:
const std::vector<double>& getData() const { return data_; }
std::vector<double>& getData() { return data_ }
但请注意,这完全破坏了封装,尤其是非常量版本。