2014-10-13 2 views
0
#include <iostream> 
#include <list> 
#include <vector> 
#include <fstream> 

using namespace std; 


class index_table 
{ 
    public: 
     index_table(); 
     void insert(string, int); 
     void find(); 
    private: 
     class entry 
     { 
      public: 
       string word; 
       vector<int> lineNum;  
     }; 
     vector<list<entry> > table; 

}; 

index_table::index_table() 
{ 
    table.resize(128); 
} 


void index_table::insert(string extrWord, int extrLineNum) 
{ 
    int index = extrWord[0]; 
    list<entry>::iterator itor = table[index].begin(); 

    itor->word = extrWord;         //why doesnt this work??? 
    itor->lineNum.push_back(extrLineNum); 

} 

Я пытаюсь выяснить, почему приведенный выше код не работает. Я получаю сбой сегментный или * Glibc обнаружен * ./a.out: munmap_chunk(): недопустимый указатель: 0x0000000001e46020 ***Добавление элементов вложенных типов данных

Я создаю «стол», который представляет собой вектор или списки, является запись. Как только каждое слово и номер строки передаются в функцию вставки, его необходимо добавить в класс записи ...

+1

Элементы (список) в таблице пуст, не так ли? – billz

+0

Да, я думаю, это ... но я не уверен, как это исправить. Я думаю, что это что-то вроде «entry * insEntry = new entry; \t \t insEntry-> word = extrWord; \t insEntry-> lineNum.push_back (extrLineNum); 'но как добавить insEntry в вектор? –

+1

просто используйте функцию 'push_back'. например 'table [index] .push_back (..)' – billz

ответ

0
int index = extrWord[0];  
entry insEntry; 
insEntry.word = extrWord;          
insEntry.lineNum.push_back(extrLineNum);        
table[index].push_back(insEntry) 
Смежные вопросы