簡體   English   中英

優化了 c++ 中下界的概念?

[英]optimized Notaion of lower bound in c++?

  1. auto it = v.lower_bound(val);

  2. auto it=lower_bound(v.begin(),v.end(),val);

問題:有時當我們使用上面給出的第一個符號時效果更佳,而第二個符號給出超過時間限制...為什么????

一個常見的誤解是這兩個函數是以相同的方式實現的。

C++ 標准對此有明確規定 - 對於非LegacyRandomAccessIterators ,比較次數是線性的! std::set屬於這一類,但會有專門針對它的lower_bound的更優化版本。

一個好的經驗法則:總是使用 case v.lower_bound(val); 如果你可以的話。

在 C++ 標准庫中,許多算法作為免費函數提供。 但有時,容器可能有同名的方法。 在這種情況下,成員變體確實是優化變體。 但這有一個警告:它針對該容器進行了優化。

一個例子是std::sortstd::list::sort 您甚至不能使用std::sort對列表進行排序,因為它太慢了。 “最優化”的選擇是std::sortstd::vector std::vector::sort不需要特殊優化; 免費的 function 已經足夠快了。

lower_bound類似; 它也作為免費的 function 和一些容器的方法存在。 當你的容器是固定的,並且那個容器有一個lower_bound方法時,使用它。 但是如果你可以選擇你的容器,你需要考慮你需要在那個容器上的所有操作。

“Time Limit Exceeded”建議競爭性編程,您需要了解 big-O 復雜性。 C++ 記錄了幾乎所有標准庫函數。

暫無
暫無

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

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