规范的方法来引用向量中的数据部分

时间:2016-04-03 18:10:20

标签: c++ vector buffer

我目前正在开发一个C ++程序,它有两个类(这里有两个相关的类)。我正在寻找规范的方法(如果有的话)来解决以下问题。

有一个更大的类,它包含一个相当大的数据缓冲区(目前是std::vector),还有一个更小的类,我也想访问这些数据。每个较小对象中的数据缓冲区是特定Bigger对象中数据的子集,因此我不想重复数据,但我希望能够轻松访问数据(并以相同的方式)来自两者。一个小代码来说明:

class Smaller {
    private:
        std::vector<char> data_;
    public:
        std::vector<char> &data() { return data_ };
};

class Bigger {
    private:
        std::vector<char> data_;
        std::vector<Smaller> smallers_;
    public:
        std::vector<char> &data() { return data_ };
};

所以类似上面的东西就是我现在所拥有的,并且Smaller中的数据被独立于Bigger中的数据读取/复制。我开始使用Smaller编写一个解决方案,该解决方案具有指向其他数据的指针,但随后排除了范围数据。我一直在寻找使用迭代器来表示Bigger缓冲区中的范围,但是后来我没有通过Smaller访问“干净”的矢量。

如果Bigger.data()和Smaller.data()提供相同的接口,同时引用相同的数据缓冲区,那将是很好的。

这在C ++中有意义吗?在C中,我可以让Bigger(struct)有一个char [],并且在Bigger和Smaller中都有一个指针和长度用于访问。我可以做这样的事情,但通常“C”的做事方式不是C ++的最佳方式。

解决方案是否为这两个类提供了类似迭代器的接口?即在Bigger中的向量是完全私有的,只暴露数据迭代器?这是一个std::pair<std::iterator,std::iterator>,还是这样的包装?

0 个答案:

没有答案