访问另一个类包含的std :: vector

时间:2013-07-22 12:08:13

标签: c++ vector stl

我仍然相对较新的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);
};

2 个答案:

答案 0 :(得分:1)

有:

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

它:

Something* processRawData(const RawNumberContainer&);

答案 1 :(得分:0)

您可以使用:

RawNumberContainer getRawNumbers() const { return rawNumbers; }

通过这种方式,您将确保无法编辑向量(仅限只读访问权限),并且无需在代码中手动声明另一个变量。