2011-06-02 27 views
0

如果我有一個向量作爲我班的私人成員,訪問它的最佳方式是什麼?例如,採取以下簡單類訪問類

class MCL{ 
    private: 
    std::vector my_vec; 

    public: 
    // Include constructor here and other member functions 
} 

什麼是訪問my_vec的最佳方式?具體來說,我想使用getter函數來訪問它。如果你想允許改變

+0

以什麼方式訪問它?一些特定的矢量方法?整個矢量? – GWW 2011-06-02 03:52:46

+0

@GWW,我想獲得整個矢量 – 2011-06-02 04:04:02

+1

容器的副本?對容器的引用?你需要容器​​本身還是需要訪問足夠的元素序列?沒有最佳實踐:它取決於容器中存儲的內容,元素類型要複製的成本以及容器和存儲在其中的元素需要執行的操作。 – 2011-06-02 04:18:47

回答

2

通過常量引用返回,或者只是作爲參考;矢量getMyVec(){回報my_vec}:

+0

謝謝你的幫助。 – 2011-06-02 04:22:49

0

創建一個名爲

STD公共職能。

const std::vector<T> & getVector() const 
{ 
    return vector; 
} 

用法:

const std::vector<T> &v = myClass.getVector(); 
+0

這將返回副本 – eugcomax 2015-05-05 11:12:40

0

根據您的類的語義,你可能要實現運營商[]:

T& operator[](int i) { 
    return my_vec[i]; 
} 

這樣,您就可以將用戶[]進入載體內容:

MCL a; 
a[0] = 3; 
std::cout << a[0] << std::endl; 

請注意,這可能被認爲是操作符[]或惡習的濫用,但是由開發人員根據其語義來判斷此構造是否適合該類。

另請注意,此解決方案不提供從矢量插入或刪除元素的方法,只需訪問已存在的元素即可。您可能需要添加其他方法來做這些或實行類似:

T& operator[](int i) { 
    if(my_vec.size() < i) 
    my_vec.resize(i+1); 
    return my_vec[i]; 
} 

再次,它是由類的語義,並且它的使用模式。這可能是也可能不是一個好主意。