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

に何かをする前に、 at positionsorted_word_vecs[i]を追加する必要があります。これは、ベクトルのサイズを変更する (推奨) か、呼び出して行うことができます。vector<string>isorted_word_vecs.push_back(vector<string>());

于 2012-02-13T01:59:01.020 に答える