我爲一個sorted_vector頭文件中的向量.find提供了一個模板化函數,用於分配任務。我正在使用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語句在無限的。在第一個代碼塊中,如果它無法找到值而不是結束,則每次它在迭代中都返回中間值?或者這兩個陳述的主要區別是什麼?
謝謝。
編輯的beg_和結束_他們被實例化這種方式:
private beg_;
private end_;
,這裏是它們是如何正常使用:
sorted_vector() : beg_(nullptr), end_(nullptr), cap_(nullptr) { }
iterator begin() { return iterator(beg_); }
iterator end() { return iterator(end_); }
第二個格式化好一點。 –
您不能有一個名爲'private'的類型。 –