2

我有一个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);
    }
}

但是我总是遇到一个段错误(我已经用 cout 将它缩小到 push_back 行)。这是错误的方法吗?

4

3 回答 3

3

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

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

不这样做意味着您要求的元素不存在于sorted_words_vecs[i] 中。

于 2012-02-13T01:57:33.727 回答
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 行)。

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

于 2012-02-13T01:58:54.317 回答
1

在您可以做任何事情之前sorted_word_vecs[i],您需要添加vector<string>at position i。您可以通过调整向量的大小(首选)或调用sorted_word_vecs.push_back(vector<string>());

于 2012-02-13T01:59:01.020 回答