std :: set :: iterator的大小是否有限制?

时间:2013-11-27 19:33:04

标签: c++ pointers iterator dereference stdset

我有一个std ::字符串集,我想迭代它们,但迭代器对于不同大小的集合表现不同。下面给出的是我正在处理的代码片段:

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;
}

代码正常运行&amp; *iter被取消引用&amp;分配到word,直到KeywordsDictionary的大小约为15000.但是当KeywordsDictionary的大小增加到15000以上时,

  1. 打印语句cout << *iter;正在正确打印KeywordsDictionary的所有内容。
  2. 但指向迭代器*iter的指针未被解除引用&amp;未被分配到wordword只是一个空字符串。
  3. 编辑:该程序的输出是:

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

    所以基本上,我猜测循环只执行一次。

1 个答案:

答案 0 :(得分:0)

尝试将keyword_len声明为

std::string::size_type keyword_len = 0;

而不是

int keyword_len = 0;