![](/img/trans.png)
[英]custom comparator in lower_bound() stl function in c++
[英]C++ STL: Passing an empty container to lower_bound
將空容器傳遞給std::lower_bound
的行為是否已定義?
我檢查了cppreference.com和我在網上找到的舊版C ++標准,但找不到明確的答案。
std::deque::erase
的cppreference.com文檔有一個句子
如果
first==last
,迭代器首先不需要是可解除引用的:擦除空范圍是無操作。
我想念std::lower_bound
和其他算法這樣的東西。
關於std::lower_bound(first, last)
的返回值的Cppreference :
“[它返回] Iterator指向不小於value的第一個元素, 如果沒有找到這樣的元素則指向
last
元素 。 ”
(強調我的)
在空范圍內,將沒有符合條件的元素,因此將返回last
。
由此得出結論,在空范圍上應用std::lower_bound
(和類似的)是明確定義的 。 它什么都不做, last
返回,等於first
。
標准說 :
返回:最遠迭代
i
在范圍[first, last]
,從而使每一迭代j
范圍[first, i)
下列相應條件成立:*j < value
或comp(*j, value) != false
。
現在:
[first, last]
范圍有一個成員,即由其成員函數end()
返回的迭代器。 i
只能end()
。 [first, i)
,即[end, end())
。 end()
並且同時低於 end()
。 由於沒有每個迭代器j
,我猜引用的句子可以重寫為:
返回: [first, last]
范圍內最遠的迭代器i
。
這意味着只有i
可以返回的是end()
。
std :: lower_bound回答了這個問題,“Where(就像在迭代器值之前)是第一個可以插入給定元素而不違反排序的地方?”如果給定的[ first,last ]范圍為空,則只有在最后一個位置插入任何東西(等於第一個 ),所以這就是lower_bound返回的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.