2013-04-28 87 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。

相关问题