这么简单的问题让我感到有些尴尬,但经过几个小时的无果谷歌搜索后,我仍然卡住了。
为了简化我的问题,第二行崩溃了:
vector<vector<string> > sorted_words;
sorted_words[0].push_back("hello");
不应该sorted_words[0]
代表我可以合法 push_back 的空向量吗?
不,你有一个向量的向量。您尚未在第 2 行向任一向量添加任何内容,因此sorted_words[0]
, 中的第一个元素sorted_words
尚不存在。
您正试图推"hello"
入 null 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 是向量的向量。
vector<vector<string>> sorted_words;
if (sorted_words.empty()) {
sorted_words.resize(1);
}
sorted_words[0].emplace_back("Hello");
通常,通过运算符访问向量具有隐含的前提条件,即向量的大小大于 i。
您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