Извините, я облажался. То, что я хотел написать, было сорта, за которым следовал линейный проход, который является типичным ответом на этот вопрос, как указывал Ицик в своем комментарии к Джерри, то есть что-то вроде
bool hasElementSum( int sum, const vector<int>& v, int* ind1, int* ind2 )
{
*ind1 = 0; *ind2 = v.size()-1;
std::sort( v.begin(), v.end() );
while ( *ind1 <= *ind2 ) {
int s = v[*ind1] + v[*ind2];
if ( s > sum ) (*ind1)++;
else if ( s < sum ) (*ind2)++;
else return true
}
return false;
}
Мой вопрос состоял в том, как написать это, используя итераторы, не говоря while (iter1 <= iter2 )
, чтобы быть общим, но теперь я вижу, что это не имеет смысла, потому что этот алгоритм все равно нуждается в итераторах с произвольным доступом. Кроме того, возвращать индексы не имеет смысла, поскольку они ссылаются на отсортированный массив, а не на исходный.