访问类中的多个容器

Access to several containers in the class

本文关键字:访问      更新时间:2023-10-16

假设有一个类,它有几个(例如2)容器作为私有成员。有不同种类的begin()(或at())成员函数来访问相应容器的迭代器(或元素)会好吗?

下面是一个小例子:

class Example
{
private:
    std::vector<double> A;
    std::vector<double> B;
public:
    double& A(std::size_t index) { return A.at(index); }
    double& B(std::size_t index) { return B.at(index); }
};

我需要这样的访问,因为有一个类请求容器A中的值,还有另一个类请求容器b的内容。一般来说,Example类可能有两个以上的容器。

这是个好主意还是有更好的解决方案?

感谢

编辑

这里是一些额外的信息:容器A总是保存一些将传递给不同函数的参数,容器B保存已经将容器A作为参数传递给函数的返回值。其他可能的容器对A

中的值有不同的限制

类之外的任何东西都关心这些向量的内容吗?如果不是,则创建一个成员函数来接受函数指针,并将其与vector一起使用。那你就不用暴露带菌者了。

使用get函数完全公开内部对象会使它们失去私有的意义。

如果可能有更多,看起来您实际上有某种容器的"列表"。就像你的命名方案A, B,…只是枚举它们,这总是表明你应该使用某种容器。那么也许你真的想要一个集装箱的std::vector s?如果它是一个固定的量,像这样:

std::array<std::vector<double>, N> containers;

如果不固定,则:

std::vector<std::vector<double>> containers;

那么你可以有一个单独的函数来请求容器的索引,然后再请求容器内的索引:

double& get(std::size_t container, std::size_t element) {
  return containers[container][element];
}

听起来您需要这样的访问器。如果元素不需要修改,可以考虑在返回值上加上const关键字

const double& getA(std::size_t index) { return A.at(index); }