2013-11-27 48 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的指針未被取消引用&未被指定爲wordword只是一個空字符串。

編輯:而程序的輸出是:

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

所以基本上,我猜循環執行一次。

+0

'的std ::設置 :: 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

相關問題