2013-11-27 2 views
0

У меня есть std :: набор строк, и я хочу перебирать их, но итератор ведет себя по-разному для разных размеров набора. Ниже приведен фрагмент кода, что я работаю на:Есть ли ограничение на размер std :: set :: iterator?

int test(set<string> &KeywordsDictionary){ 
    int keyword_len = 0; 
    string word; 
    set<string>::iterator iter; 

    cout << "total words in the database : " << KeywordsDictionary.size() << endl; 

    for(iter=KeywordsDictionary.begin();iter != KeywordsDictionary.end();iter++) { 

     cout << *iter; 

     word = *iter; 
     keyword_len = word.size(); 

     if(keyword_len>0) 
      Dosomething(); 
     else 
      cout << "Length of keyword is <= 0" << endl; 
    } 
    cout << "exiting test program" << endl; 
} 

Этот код работает правильно & *iter в настоящее время разыменовываются & назначенную word пока размер KeywordsDictionary не вокруг 15000. Однако, когда размер KeywordsDictionary увеличивается за 15000,

  1. оператор печати cout << *iter; печатает все содержимое KeywordsDictionary правильно.
  2. но указатель на итератор *iter не разыменован & не присвоен word. word просто пустая строка.

EDIT: И выход из программы:

total words in the database : 22771 
�z���AAAADAAIIABABBABLEABNABOUTACACCEPTEDACCESSACCOUNT... 
Length of keyword is <= 0 
exiting test program 

Так в основном, я предполагаю, что цикл выполняется только один раз.

+0

'станд :: установить :: iterator' имеет фиксированный размер, независимо от размера содержимого, проведенных в' T'. – Chad

+0

Просьба представить полный пример, демонстрирующий проблему, скопированную и вставленную из того, что вы действительно скомпилировали и выполнили. –

+0

У вас нет новой строки в конце печати строки ('cout << * iter;'), поэтому все строки будут печататься один за другим в одной строке? Это то, что вы видите? – rabensky

ответ

0

Попытка объявить keyword_len, как

std::string::size_type keyword_len = 0; 

вместо

int keyword_len = 0; 
+0

Если порог для проблем действительно составляет всего 15000, это кажется маловероятным преступником. – hyde

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

  • Нет связанных вопросов^_^