在矢量上使用push_back<矢量<string>>

Using push_back on a vector<vector<string> >

本文关键字:lt gt 矢量 string back push      更新时间:2023-10-16

这样一个简单的问题让我有点尴尬,但在谷歌上搜索了几个小时毫无结果后,我仍然卡住了。

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

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

难道sorted_words[0]不应该是一个空向量,我可以合法地把_push_back放到上面吗?

No。你有一个向量的向量。到第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是向量的向量。

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