访问班级中的几个容器

时间:2014-06-21 21:15:46

标签: c++ oop containers

假设有一个类有几个(例如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可能有两个以上容器

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

由于

修改

以下是一些其他信息:container A始终包含一些将传递给不同函数的参数,容器B保存从已传递容器A的函数返回的值作为一个论点。其余可能的容器将对可以存储在A

中的值具有不同的约束

3 个答案:

答案 0 :(得分:1)

班级以外的任何事情都关心这些载体的内容吗?如果没有,创建一个成员函数来获取函数指针并将其与向量一起使用。然后你不需要暴露矢量。使用get函数完全暴露内部对象会使得它们变得私有化。

答案 1 :(得分:0)

如果可能有更多,看起来你实际上有某种&#34;列表&#34;容器几乎像你的命名方案AB,...只是枚举它们,这总是你应该使用某种容器的标志。那么也许你真的想要一个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];
}

答案 2 :(得分:0)

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

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