2

私はまだ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);
};
4

2 に答える 2

1

これ:

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

そしてそれ:

Something* processRawData(const RawNumberContainer&);
于 2013-07-22T13:15:13.457 に答える
0

以下を使用できます。

RawNumberContainer getRawNumbers() const { return rawNumbers; }

このようにして、ベクトルを編集できないようにし (読み取り専用アクセスのみ)、コード内で別の変数を手動で宣言する必要がないようにします。

于 2013-07-22T13:10:36.083 に答える