我有点尴尬,这个简单的问题让我感到困扰,但经过几个小时毫无结果的谷歌搜索,我仍然被卡住了。
为了简化我的问题,第二行崩溃了:
vector<vector<string> > sorted_words;
sorted_words[0].push_back("hello");
sorted_words[0]
不应该代表我可以合法推送到的空矢量吗?
答案 0 :(得分:7)
没有。你有一个向量的向量。您没有在第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);
答案 1 :(得分:1)
您的对象sorted_words是向量的向量。
vector<vector<string>> sorted_words;
if (sorted_words.empty()) {
sorted_words.resize(1);
}
sorted_words[0].emplace_back("Hello");
通常,通过运算符对向量的加入具有隐含的前提条件,即向量的大小大于i。
答案 2 :(得分: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