在vector <vector <string>&gt; </vector <string>上使用push_back

时间:2013-04-28 01:44:39

标签: c++ stl

我有点尴尬,这个简单的问题让我感到困扰,但经过几个小时毫无结果的谷歌搜索,我仍然被卡住了。

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

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

sorted_words[0]不应该代表我可以合法推送到的空矢量吗?

3 个答案:

答案 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