Я все еще относительно новичок в C++, изучая, как я иду, и я смущен относительно того, что является «лучшим» способом разоблачить вектор для его потребителей. Я не беспокоюсь о производительности.доступ к std :: вектору, содержащемуся другим классом
У меня есть класс, который содержит вектор 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);
};
Вместо имен, как 'getRawNumbersBeginning()' и 'getRawNumbersEnd()', вы можете просто выбрать 'начать()' и 'конец() '. Они лучше, и ваш класс будет вести себя как контейнеры, и вы сможете использовать его также в цикле for for for. – Nawaz
Рассмотрите также константные итераторы – doctorlove
Или вы можете просто забыть обо всех этих уроках и использовать вектор напрямую ... Я имею в виду, что если все ваши 'RawData' собираются сделать, это удерживать вектор и публиковать общедоступные методы вектора, то это Вы знаете, это бесполезно. Вы сказали, что у вас есть другой класс, который должен потреблять и обрабатывать этот вектор. Ну, разве вы не думаете, что было бы неплохо сохранить данные, над которыми он работает? – jrok