У меня есть шаблонная функция для .find для векторов в файле заголовка sorted_vector, который я получил для назначения. Я выполняю модульное тестирование на разных методах/конструкторах и т. Д., Используя библиотеку BOOST, чтобы убедиться, что нет ошибок и сделать код более надежным в случае появления ошибок. Я только что быстрый вопрос о различиях между этими двумя кодовыми блоками:В чем разница между этими двумя блоками кода?
template <typename T>
typename sorted_vector<T>::iterator sorted_vector<T>::find(value_type const& value) const {
auto front = beg_;
auto back = end_;
for(;;) {
auto p = (back - front)/2 + front;
if(p == end_)
return p;
else if(*p == value)
return p;
else if(*p > value)
back = p;
else
front = p + 1;
}
}
И этот блок:
template <typename T>
typename sorted_vector<T>::iterator sorted_vector<T>::find(value_type const& value) const {
auto front = beg_;
auto back = end_;
for(;;) {
auto p = (back - front)/2 + front;
if(p == back)
return end_;
else if(*p == value)
return p;
else if(*p > value)
back = p;
else
front = p + 1;
}
}
Мой вопрос относительно первого, если утверждение в бесконечность для. В первом блоке кода он возвращает среднее значение каждый раз, когда он выполняет итерацию через вектор, если он не может найти значение вместо конца? Или в чем основное отличие двух операторов if?
Спасибо.
EDIT для beg_ и end_ они конкретизируются следующим образом:
private beg_;
private end_;
и вот как они используются, как правило:
sorted_vector() : beg_(nullptr), end_(nullptr), cap_(nullptr) { }
iterator begin() { return iterator(beg_); }
iterator end() { return iterator(end_); }
Второй вариант немного лучше отформатирован. –
У вас не может быть типа 'private'. –