2012-04-18 2 views
-1

Я использую пустой вектор structs.C++: vectorof structs

сейчас, когда я ввод данных в один из элементов структуры, он меняет размер вектора?

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

некоторые соответствующий код:

struct wordstype 
{ 
    string word; 
    int counter_same; 
    int counter_contained; 
    int counter_same1; 
}; 
std::vector<wordstype>::iterator iv=vec1.begin(); 
string temp_str; 
string::iterator is=str1.begin(); 

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(); 
    } 
} 
+0

Возможный дубликат [C++: как вставить данные в элемент структуры (структура, расположенная в векторе)] (http://stackoverflow.com/questions/10208367/c-how-to-insert-data-to-a -struct-member-struct-location-in-vector) –

+0

Вы должны отредактировать исходный вопрос, а не публиковать новый! –

+1

В принципе, получите данные в слова Type и do vec1.push_back (wordsTypeObj); Это безопасно. – Jagannath

ответ

0

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

Попробуйте вместо этого:

wordstype wt;  // create a new struct 
wt.word = temp_str; // set its elements as desired 
vec1.push_back(wt); // insert the new struct into the empty vector 

В качестве альтернативы вы можете объявить вектор, как

vector<wordstype> vec1(1); 

, который будет инициализировать его с размером 1. Тогда ваш текущий код будет работать (несколько).

+0

«Тогда ваш текущий код будет работать» - пока он не увеличит «iv» и не попытается получить доступ ко второму элементу. –

+0

@MikeSeymour Ну, вот почему я поставил «несколько» в parens - одну проблему за раз, хотя :) Он еще не написал еще одну ошибку. –

0

Нет, вы не можете получить доступ к содержимому векторного элемента до его существования в векторе.

Если vec1.empty() is true, в векторе нет элементов.

Вам необходимо создать новые данные в отдельном экземпляре wordstype, а затем нажать на него.