2012-12-08 79 views
0

我玩矢量,試圖更好地瞭解他們。 我創建了(我認爲)的空載體:vector<string> contents; 我創建了(我認爲)的存取方法:vector<string> getContents(); 的方法是這樣的:C++矢量訪問器方法

vector<string> Album::getContents() 
    { 
     cout << "\nAlbum Contents:\n\n" << endl; 
     for(vector<string>::iterator iter = contents.begin(); 
            iter !=contents.end(); iter++) 
      { 
       cout << *iter << endl; 
      } 
    } 

這是一個合適的存取方法還是我在想什麼?因爲我的getContents不會返回任何內容,而只是將其打印出來...

假設這是一個有效的方法,那麼返回矢量集合的內容的更好方法是什麼?謝謝。

編輯:我剛編譯它,我的方法需要返回一些東西......所以,現在我假設我的方法是毫無意義的,你應該能夠返回矢量集合逐項類似於Java數組使用for循環?我不知道。

回答

3

這幾乎是合適的。但是你的方法需要返回一些東西。它被定義爲返回向量的一個副本,因此它可以通過返回的contents一份工作:

vector<string> Album::getContents() 
{ 
    cout << "\nAlbum Contents:\n\n" << endl; 
    for(vector<string>::iterator iter = contents.begin(); 
           iter !=contents.end(); iter++) 
    { 
      cout << *iter << endl; 
    } 
    return contents; // return a copy of contents 
} 

您需要決定是否要調用者得到載體的拷貝,或者您是否要讓他們得到一個參考它。如果你想這樣做,你的方法就必須是

vector<string>& getCOntents(); // caller can get a read-write reference to contents 
const vector<string>& getContents() const; // caller can get a read only reference to contents. 

一個或兩個但要注意,提供一個類的內部引用可能會非常棘手管理。至少,你必須確定一個調用者提到的對象的生命至少與參考一樣長。

+0

啊我明白了。這是我出錯的地方。我將添加return語句。有兩個方法是明智的,一個返回一個副本,一個返回參考?這些方法如何不同?謝謝 – binary101

+0

輝煌,你剛剛在我打字的時候回答了我的問題。謝謝你的幫助。 :D – binary101

+0

如果你希望Vector持有某個類的某些對象,比如說你有一個'class book'和一個'class store',並且你想在'class store'中創建一個'book objects'的向量,你聲明它像'vector bookList;'?如果您將字符串與Book交換,此訪問器方法的工作原理是否相同? – binary101