5

这么简单的问题让我感到有些尴尬,但经过几个小时的无果谷歌搜索后,我仍然卡住了。

为了简化我的问题,第二行崩溃了:

  vector<vector<string> > sorted_words;
  sorted_words[0].push_back("hello");

不应该sorted_words[0]代表我可以合法 push_back 的空向量吗?

4

3 回答 3

7

不,你有一个向量的向量。您尚未在第 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);
于 2013-04-28T01:47:36.570 回答
1

您的对象 sorted_words 是向量的向量。

vector<vector<string>> sorted_words;
if (sorted_words.empty()) {
  sorted_words.resize(1);
}
sorted_words[0].emplace_back("Hello");

通常,通过运算符访问向量具有隐含的前提条件,即向量的大小大于 i。

于 2013-04-28T01:59:56.507 回答
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

于 2013-04-28T01:50:33.780 回答