Я хранением значений в станде :: КартаSTL контейнеры: итерация между двумя итераторами
Я нахожу два значение в карте, и я хочу итерацию между первым до последнего пункта - однако < = оператор не выполняется, так что я не могу сделать somethimng так:
void foobar(const DatedRecordset& recs, const double startstamp, const double endtstamp)
{
DatedRecordsetConstIter start_iter = recs.lower_bound(startstamp), end_iter = recs.lower_bound(endtstamp);
// Can't do this .... (<= not defined)
//for (DatedRecordsetConstIter cit = start_iter; cit <= end_iter; cit++)
/So have to resort to a hack like this:
for (DatedRecordsetConstIter cit = start_iter; cit != recs.end(); cit++) {
if ((*cit).first <= (*end_iter).first){
//do something;
}
else
break;
}
}
}
есть ли более элегантный способ итерации между двумя известными итераторами?
Вы можете использовать cit! = (End_iter + 1). –
Это не будет работать для 'std :: map :: iterator'; он не имеет определенного оператора '+'. Использование чего-то типа boost :: next было бы, однако, предполагая, что 'end_iter' не' recs.end() '(в любом случае исходная спецификация будет недействительной в этом случае). –
@Jeremiah Willcock: Вы правы, но оператор '++' может выполнить трюк 'new_end_iter = end_iter ++'. –