我有一个模板函数,用于 .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;
}
}
我的问题是关于无限 for 中的第一个 if 语句。在第一个代码块中,如果它找不到值而不是结尾,它是否在每次遍历向量时都返回中间值?或者这两个 if 语句之间的主要区别是什么?
谢谢。
编辑 beg_ 和 end_ 它们以这种方式实例化:
private beg_;
private end_;
以下是它们的正常使用方式:
sorted_vector() : beg_(nullptr), end_(nullptr), cap_(nullptr) { }
iterator begin() { return iterator( beg_ ); }
iterator end() { return iterator( end_ ); }