簡體   English   中英

范圍算法和標准算法之間的區別

[英]Difference between Ranges algorithms and std algorithms

許多標准庫算法在 C++20 中有兩個版本:一個在std命名空間中,另一個在std::ranges命名空間中具有相同的名稱。 例如, std::ranges::countstd::count都用於計算滿足謂詞的元素的數量。

為什么這些算法有兩個版本?

Ranges 功能將 C++20 概念添加到迭代器和范圍,並將其算法等的定義限制在這些概念中。 但是,C++20 概念與 C++17 命名要求有不同的要求。 通常,滿足 C++17 要求的類型將滿足 C++20 概念等價物,但並非在所有情況下1 雖然通常很容易更新您自己的代碼以使其對 C++20 概念有效,但它仍然會破壞用戶編寫的迭代器的向后兼容性,以停止在 C++20 中進行編譯。

因此,他們沒有將約束算法強加給用戶,而是創建了您可以選擇使用的新算法。 因此,沒有代碼損壞。

1 :另外,因為 C++17 的要求從來沒有被任何東西實際檢查過,所以很容易意外地編寫一個沒有完全實現他們的要求的迭代器。 您使用的算法實際上可能無法使用您未實現的功能,因此看起來您實現了您需要的功能。 如果您沒有針對多個標准庫實現測試代碼,則尤其如此。 如果 C++20 開始檢查您的迭代器,它會突然破壞您技術上已損壞但功能正常的代碼。

暫無
暫無

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

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