我有些尴尬,这样一个简单的问题阻碍了我,但经过几个小时的徒劳无功的谷歌搜索,我仍然陷入了困境。对矢量使用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