2013-04-28 86 views
4

我有些尷尬,這樣一個簡單的問題阻礙了我,但經過幾個小時的徒勞無功的谷歌搜索,我仍然陷入了困境。對矢量使用push_back <vector <string>>

爲了簡化我的問題,在此二號線崩潰:

vector<vector<string> > sorted_words; 
    sorted_words[0].push_back("hello"); 

不應該sorted_words[0]代表的空載體,我可以合法的push_back到?

回答

6

不,你有一個向量的載體。您沒有在第2行添加任何矢量,因此sorted_words[0]sorted_words中的第一個元素)尚不存在。

您正試圖將"hello"變爲空vector

空指針取消引用!

我會問「你真的想要矢量矢量,還是隻是一個字符串矢量」?

如果你想要一個字符串矢量,然後使用:

vector<string> sorted_words; 
sorted_words.push_back("hello"); 

如果你真的想向量的向量(串),然後使用:

vector<string> first_vector; 
first_vector.push_back("hello"); 
sorted_words.push_back(first_vector); 
+0

這很有道理。我想要做的是採取地圖的單詞和字數,並扭轉它。 (所以我有一個計數和經常顯示的單詞列表)。我的原始代碼更像:\t'(地圖 :: const_iterator it = counters.begin(); it!= counters.end() ; ++ it){sorted_words [it-> second] .push_back(it-> first); }' – 2013-04-28 01:59:04

+0

@TheyCallMeBruce,好的,這個解釋是否能解決你的問題,還是你還有問題?解釋你試圖解決的整個問題的一個新問題可能有用嗎? – Nate 2013-04-28 02:05:29

+0

好的,謝謝。我會去做。 – 2013-04-28 02:13:37

0

sorted_words還沒有被分配了內存。因此sorted_words[0]將嘗試訪問尚不存在的內容。

嘗試以下操作:

vector<vector<string> > sorted_words (100); 
sorted_words[0].push_back("Hello"); 

或者你也可以做到以下幾點:

vector<vector<string> > sorted_words; 
vector<string> innerVec; 
innerVec.push_back("Hello"); 
innerVec.push_back("World"); 
sorted_words.push_back(innerVec); 

您可以查看這裏活生生的例子:http://ideone.com/KlliR8#view_edit_box

0

你的對象sorted_words是向量的向量。

vector<vector<string>> sorted_words; 
if (sorted_words.empty()) { 
    sorted_words.resize(1); 
} 
sorted_words[0].emplace_back("Hello"); 

一般來說,通過操作者加入一個矢量具有隱含的前提條件,即矢量的尺寸大於i。

相關問題