访问另一个类包含的std::矢量

access to a std::vector contained by another class

本文关键字:std 矢量 包含 另一个 访问      更新时间:2023-10-16

我对C++还比较陌生,边学习边学习,我不知道向消费者展示向量的"最佳"方式是什么。我不担心表现。

我有一个类,它包含一个向量raw data。我还有其他类需要使用和处理该向量。

通过阅读这里的其他帖子,我不确定是返回对向量的const引用还是公开const iterators,因为没有消费者会修改向量。

一种方法比另一种好吗?是否有其他选择或其他事情需要考虑?

typedef std::vector<int> RawNumberContainer;
typedef std::vector<int>::const_iterator RawNumberIterator;
class RawData
{
public:
  RawData();
  void addNumber(int number)
  {
    rawNumbers.push_back(number);
  }
  // this?
  RawNumberContainer getRawNumbers() { return rawNumbers; }
  // or this?
  const RawNumberContainer& getRawNumbersConstReference() { return rawNumbers; }
  // or this?
  RawNumberIterator getRawNumbersBeginning() { return rawNumbers.begin(); }
  RawNumberIterator getRawNumbersEnd() { return rawNumbers.begin(); }

private:
  RawNumberContainer rawNumbers;
};
class Something;
class RawDataConsumer
{
public:
  // ??
  Something* processRawData(RawNumberContainer&);
  // ??
  Something* processRawData(const RawNumberContainer&);
  // ??
  Something* processRawData(RawNumberIterator begin, RawNumberIterator end);
};

It:

const RawNumberContainer& getRawNumbersConstReference() const { return rawNumbers; }

它:

Something* processRawData(const RawNumberContainer&);

您可以使用:

RawNumberContainer getRawNumbers() const { return rawNumbers; }

通过这种方式,您将确保不能编辑矢量(仅只读访问),并避免在代码中手动声明另一个变量。