簡體   English   中英

C ++ STL:將空容器傳遞給lower_bound

[英]C++ STL: Passing an empty container to lower_bound

將空容器傳遞給std::lower_bound的行為是否已定義?

我檢查了cppreference.com和我在網上找到的舊版C ++標准,但找不到明確的答案。

std::deque::erasecppreference.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 < valuecomp(*j, value) != false

現在:

  1. 空容器的[first, last]范圍有一個成員,即由其成員函數end()返回的迭代器。
  2. 因此i只能end()
  3. 只有一個可行的范圍[first, i) ,即[end, end())
  4. 此范圍為空,因為沒有元素大於或等於 end()並且同時低於 end()

由於沒有每個迭代器j ,我猜引用的句子可以重寫為:

返回: [first, last]范圍內最遠的迭代器i

這意味着只有i可以返回的是end()

std :: lower_bound回答了這個問題,“Where(就像在迭代器值之前)是第一個可以插入給定元素而不違反排序的地方?”如果給定的[ first,last ]范圍為空,則只有在最后一個位置插入任何東西(等於第一個 ),所以這就是lower_bound返回的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM