0

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

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. print 语句cout << *iter;正在正确打印所有内容KeywordsDictionary
  2. 但是指向迭代器的指针*iter没有被取消引用,也没有被分配给word. word只是一个空字符串。

编辑:程序的输出是:

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

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

4

1 回答 1

0

尝试将keyword_len 声明为

std::string::size_type keyword_len = 0;

代替

int keyword_len = 0;
于 2013-11-27T19:39:59.213 回答