std::lower_bound и std::find для простого массива

Мне нравится использовать std::algorithmвсякий раз, когда я могу работать с простыми массивами. Теперь у меня есть 2 сомнения; предположим, я хочу использовать std::lower_bound, что произойдет, если значение, которое я укажу в качестве аргумента, не будет найдено?

int a[] = {1,2,3,4,5,6};
int* f = std::lower_bound(a,a+6,20);

Результат, который я получаю при печати *f, равен 20.

То же самое происходит, если я использую std::find.

int a[] = {1,2,3,4,5,6};
int* f = std::find(a,a+6,20);

Результат, который я получаю при печати *f, равен 20.

  1. Всегда ли возвращаемое значение является исходным аргументом? когда это не найдено?
  2. С точки зрения производительности std::lower_boundработает лучше, чем std::find, поскольку реализует алгоритм бинарного поиска. Если массив большой, скажем, максимум 10 элементов, может ли std::find работать лучше? За кулисами std::lower_bound вызывает std::advance и std::distance .. может быть, я мог бы сэкономить и на этих вызовах?

Большое спасибо

AFG

14
задан Abruzzo Forte e Gentile 1 June 2012 в 15:53
поделиться