2013-04-02 113 views
0

我有一個std::map<std::string, std::vector<MyClass>>類型的地圖。這張地圖以這種方式填充,我創建了一個矢量,並將它作爲一對導入到地圖中。然後我想調用一個函數,給剛插入的矢量,並讓它填充矢量。它看起來像:C++通過STL容器項目作爲參考

{ 
    std::string guid = "aGUID" 
    std::vector<MyClass> vec_myClass(0); 
    my_map[guid] = vec_myClass; 
    std::vector<MyClass>& vec_ref = my_map[guid]; 

    FillVector(vec_ref);  
} 

FillVector(std::vector<MyClass>& vec) { vec.push_back(...); } 

我認爲[]操作返回my_map一個項目的參考,這是我可以給一個函數與它的工作,但在這一點上我的應用程序崩潰。我首先將矢量放入地圖(當它是空的時候),因爲我想避免複製工作,因爲函數FillVector將大量項目放入矢量中。我的錯誤在哪裏?通過引用傳遞參考可能會錯誤嗎?或者有更好的解決方案嗎?我比這裏更喜歡指針的引用。 Thx,並且一切順利。

+2

人們可以嘗試編譯和運行自己的小型測試用例將是理想的,因爲問題可能出現在我們無法看到的代碼部分。 – PlasmaHH

+0

周圍的代碼非常龐大,很難提取測試用例。有沒有在線可能提供測試用例在c + +(如jsFiddle)? – Michbeckable

+0

您的意思是likie ideone.com和liveworkspace.org? – PlasmaHH

回答

2

所有的代碼可以簡化爲:

{ 
    std::string guid = "aGUID" 
    FillVector(my_map[guid]);  
} 

順便說一句。我認爲你的問題似乎沒有在這裏,但在代碼中,你不顯示我們...

+0

簡化很好。我認爲你是對的,錯誤是在別的地方。首先,我使用指針而不是引用來處理所有事情:std :: map *>。這工作得很好...... – Michbeckable

+0

在我的應用程序中,我實際上是在提供FillVector方法的類中存儲對vec的引用。也許我會遇到問題,因爲當類被銷燬時引用會被殺死? – Michbeckable

+0

這是由地圖的生命時間控制的,引用是作爲地圖中的值的向量,因此只要地圖處於活動狀態,引用就會有效。 – Nim

0

std :: map運算符將在內部創建鍵的值,如果它不存在。請參閱this link。將引用傳遞給函數是可以的,問題似乎在代碼中的其他地方。