Рассмотрите векторный контейнер объектов C++ с полями a и time. Мы хотим найти первый элемент в контейнере, который возникает после текущего времени (назовем его элементом N), а затем перебираем контейнер, начиная с первого элемента, который происходит в более раннее время с полем a, имеющим определенное значение (так в основном, из [N-1, inf)). Предполагая, что свойство не найдено, мы выполнили бы вторую итерацию по всему списку.Определение начальной позиции итератора
Будет ли работать следующий код? (в этом примере мы хотим найти последний элемент с помощью> = 5). Есть ли лучший способ сделать это?
myVectorType::const_iterator cBegin = myVectorObj.begin();
myVectorType::const_iterator cEnd = myVectorObj.end();
// Find the most recent item with a >= 5
for (myVectorObj::const_iterator iter = cBegin; iter != cEnd; ++iter)
{
if ((*iter).time >= currentTime)
{
// Found an item that is in the future - we should have determined the location of the most
// recent item with the propery we're looking for.
break;
}
else if ((*iter).a >= 5)
{
// Past item with a >= 5. Save the location.
cBegin = iter;
}
}
// Iterate over the container, beginning at the most recent item with a >= 5, if it was found.
for (; cBegin != cEnd; ++cBegin)
{
dostuff();
}
Это выглядит подозрительно, как школьное задание (особенно часть, где вы спрашиваете), будет ли работать следующий код? »- это означает, что вы не пытались скомпилировать или отлаживать этот код) – UnholySheep
Если вектор отсортирован по времени, взгляд на std :: lower_bound –