2013-07-22 61 views
2

對於C++來說,我仍然比較陌生,隨着我的學習,我對將矢量展示給它的消費者的'最佳'方式感到困惑。我並不擔心表演。對另一個類包含的std :: vector的訪問

我有一個類包含一個向量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

而是像'getRawNumbersBeginning()'和'getRawNumbersEnd()'的名字,你可以只選擇'開始()'和'結束()'。它們更好,而且你的類將像容器一樣工作,你也可以在基於範圍的for循環中使用它。 – Nawaz

+0

也考慮const迭代器 – doctorlove

+0

或者,你可以忘記所有這些類的東西,並直接使用向量......我的意思是,如果你所有的'RawData'要做的就是保存一個向量並且暴露向量的公共方法,那麼它就是...有點沒用,你知道。你說你有其他一些需要消耗和處理該向量的類。那麼,你認爲保持它正在處理的數據還不錯嗎? – jrok

回答

1

它:

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

它:

Something* processRawData(const RawNumberContainer&); 
+0

這是我的偏好。我認爲這更好地表明瞭矢量並不意味着要被修改的意圖。 – RobertW

0

您可以使用:

RawNumberContainer getRawNumbers() const { return rawNumbers; } 

這種方式,你會確保你不能編輯矢量(只有只讀權限)和饒你另一個變量在被宣告手動您碼。

相關問題