2012-04-18 3 views
0

как вы могли видеть в названии, я работаю над вектором structs.C++: как вставить данные в элемент struct (struct, расположенный в векторе)

Один из элементов структуры: Строковое слово. , когда я пытаюсь ввести данные этому элементу таким образом: (* iv) .word = temp_str;, я получаю ошибку времени выполнения.

while (is!=str1.end()) 
{ 
    if (((*is)!='-')&&((*is)!='.')&&((*is)!=',')&&((*is)!=';')&&((*is)!='?')&&((*is)!='!')&&((*is)!=':')) 
    { 
     temp_str.push_back(*is); 
     ++is; 
    } 
    else 
    {   
     (*iv).word=temp_str; 
     ++iv; 
     str1.erase(is); 
     temp_str.clear(); 
    } 
} 

Это может быть соответствующий интервал кода.

следует сказать-слово и temp_str имеют строковый тип. iv - итератор к вектору.

Каков правильный способ ввода данных в элемент структуры в этом случае?

+0

Опубликовать код, в котором вы указываете temp_str –

+0

Как вы инициализируете свой вектор? как вы повторяете вектор? пожалуйста, предоставьте соответствующие фрагменты кода – giorashc

+0

@iammilind, никто не несет ответственность за то, что родился в англоязычной стране. –

ответ

2

Ваш итератор, вероятно, недействителен, иначе не должно быть проблем с назначением одной строки другому.

Одной из проблем является строка:

str1.erase(is); 

Это приведет к аннулированию is, вероятно, вы должны изменить его на:

is = str1.erase(is); 

Что iv точку в? Похоже, вам нужно добавить что-то вроде:

while (is!=str1.end() && iv != something.end()) 

как хорошо.

1

Я бы предположил, что это проблема с итератором или выделение пространства для вектора. Вот что должно работать

#define N 10 

struct myStruct 
{ 
    int a; 
    std::string str; 
}; 

int main() 
{ 
    std::vector<myStruct> myVector; 
    myVector.resize(N); 
    std::vector<myStruct>::iterator itr;  
    for (itr = myVector.begin(); itr != myVector.end(); ++itr) 
    { 
     std::string tmp = getString(); 
     itr->str = tmp; 
    } 
    return 0; 
} 
+0

Каково ваше решение, когда размер Vector неизвестен? – adamco

+0

Ну, это действительно зависит от того, что вы хотите сделать. Вы можете использовать метод push_back вектора в цикле, пока не получите пустую строку или что-то, что укажет на то, что вы закончили. –

Смежные вопросы