我有一个 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 时,
- print 语句
cout << *iter;
正在正确打印所有内容KeywordsDictionary
。 - 但是指向迭代器的指针
*iter
没有被取消引用,也没有被分配给word
.word
只是一个空字符串。
编辑:程序的输出是:
total words in the database : 22771
�z���AAAADAAIIABABBABLEABNABOUTACACCEPTEDACCESSACCOUNT...
Length of keyword is <= 0
exiting test program
所以基本上,我猜循环只执行一次。