如何push_back到子向量?

时间:2012-02-13 01:55:07

标签: c++ vector push-back

我有vector< vector<string> >并希望使用push_back()向内部向量添加字符串。这就是我试过的:

vector< vector<string> > sorted_word_vecs;
char word_read[MAX_WORD_LENGTH];


for(int i = 0; i < num_of_pipes; i++)
{
    while (fgets(word_read, MAX_WORD_LENGTH, pipe_read_from_sort[i]) != NULL)
    {
        word = word_read;
        sorted_word_vecs[i].push_back(word);
    }
}

但我总是遇到一个seg错误(我已经把它缩小到了与cout的push_back行)。这是错误的做法吗?

3 个答案:

答案 0 :(得分:3)

您需要在外部矢量中创建空间:

vector< vector<string> > sorted_word_vecs;
char word_read[MAX_WORD_LENGTH];
sorted_word_vecs.resize(num_of_pipes);

不执行此操作意味着您要求sorted_words_vecs[i]不存在的元素。

答案 1 :(得分:1)

您必须先将矢量推入主矢量。

for(int i = 0; i < num_of_pipes; i++)
{
    sorted_word_vecs.push_back(vector<string>());
    while (fgets(word_read, MAX_WORD_LENGTH, pipe_read_from_sort[i]) != NULL)
    {
        word = word_read;
        sorted_word_vecs[i].push_back(word);
    }
}
  

(我已经将它缩小到与cout的push_back行)。

您应该学习如何使用调试器。

答案 2 :(得分:1)

sorted_word_vecs[i]之前,您需要在位置vector<string>添加i。您可以通过调整矢量(首选)或调用sorted_word_vecs.push_back(vector<string>());

来完成此操作