У меня есть 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,
- оператор печати
cout << *iter;
печатает все содержимоеKeywordsDictionary
правильно. - но указатель на итератор
*iter
не разыменован & не присвоенword
.word
просто пустая строка.
EDIT: И выход из программы:
total words in the database : 22771
�z���AAAADAAIIABABBABLEABNABOUTACACCEPTEDACCESSACCOUNT...
Length of keyword is <= 0
exiting test program
Так в основном, я предполагаю, что цикл выполняется только один раз.
'станд :: установить :: iterator' имеет фиксированный размер, независимо от размера содержимого, проведенных в' T'. –
Chad
Просьба представить полный пример, демонстрирующий проблему, скопированную и вставленную из того, что вы действительно скомпилировали и выполнили. –
У вас нет новой строки в конце печати строки ('cout << * iter;'), поэтому все строки будут печататься один за другим в одной строке? Это то, что вы видите? – rabensky