我有一个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以上时,
cout << *iter;
正在正确打印KeywordsDictionary
的所有内容。*iter
的指针未被解除引用&amp;未被分配到word
。 word
只是一个空字符串。 编辑:该程序的输出是:
total words in the database : 22771
�z���AAAADAAIIABABBABLEABNABOUTACACCEPTEDACCESSACCOUNT...
Length of keyword is <= 0
exiting test program
所以基本上,我猜测循环只执行一次。
答案 0 :(得分:0)
尝试将keyword_len声明为
std::string::size_type keyword_len = 0;
而不是
int keyword_len = 0;