Как push_back в субвектор? - PullRequest
       30

Как push_back в субвектор?

2 голосов
/ 13 февраля 2012

У меня есть 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);
    }
}

Но я всегда получаю ошибку сегмента (я сузил ее до строки push_back cout's). Это неправильный способ сделать это?

Ответы [ 3 ]

3 голосов
/ 13 февраля 2012

Вам нужно создать пространство во внешнем векторе:

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

Если вы этого не сделаете, вы запрашиваете элемент, который не существует с sorted_words_vecs[i].

1 голос
/ 13 февраля 2012

Прежде чем вы сможете что-либо сделать с sorted_word_vecs[i], вам нужно добавить vector<string> в положение i. Вы можете сделать это, изменив размер вектора (предпочтительно) или вызвав sorted_word_vecs.push_back(vector<string>());

1 голос
/ 13 февраля 2012

Вы должны сначала вставить вектор в основной вектор.

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);
    }
}

(я сузил его до линии push_back cout's).

Вы должны научиться пользоваться отладчиком.

...