我有些尷尬,這樣一個簡單的問題阻礙了我,但經過幾個小時的徒勞無功的谷歌搜索,我仍然陷入了困境。對矢量使用push_back <vector <string>>
爲了簡化我的問題,在此二號線崩潰:
vector<vector<string> > sorted_words;
sorted_words[0].push_back("hello");
不應該sorted_words[0]
代表的空載體,我可以合法的push_back到?
我有些尷尬,這樣一個簡單的問題阻礙了我,但經過幾個小時的徒勞無功的谷歌搜索,我仍然陷入了困境。對矢量使用push_back <vector <string>>
爲了簡化我的問題,在此二號線崩潰:
vector<vector<string> > sorted_words;
sorted_words[0].push_back("hello");
不應該sorted_words[0]
代表的空載體,我可以合法的push_back到?
不,你有一個向量的載體。您沒有在第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);
您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
你的對象sorted_words是向量的向量。
vector<vector<string>> sorted_words;
if (sorted_words.empty()) {
sorted_words.resize(1);
}
sorted_words[0].emplace_back("Hello");
一般來說,通過操作者加入一個矢量具有隱含的前提條件,即矢量的尺寸大於i。
這很有道理。我想要做的是採取地圖的單詞和字數,並扭轉它。 (所以我有一個計數和經常顯示的單詞列表)。我的原始代碼更像:\t'(地圖 :: const_iterator it = counters.begin(); it!= counters.end() ; ++ it){sorted_words [it-> second] .push_back(it-> first); }' –
2013-04-28 01:59:04
@TheyCallMeBruce,好的,這個解釋是否能解決你的問題,還是你還有問題?解釋你試圖解決的整個問題的一個新問題可能有用嗎? – Nate 2013-04-28 02:05:29
好的,謝謝。我會去做。 – 2013-04-28 02:13:37