std::erase_if (std::flat_set)
來自 cppreference.com
在標頭檔案 <flat_set> 中定義 |
||
template< class Key, class Compare, class KeyContainer, class Pred > |
(C++23 起) | |
從 c 中擦除所有滿足謂詞 pred 的元素。
如果表示式 bool(pred(std::as_const(e))) 為 true,則謂詞 pred 滿足,其中 e
是 c 中的某個元素。
Key
必須是 可移動賦值 (MoveAssignable)。否則,行為未定義。
目錄 |
[編輯] 引數
c | - | 要從中擦除元素的容器介面卡 |
pred | - | 如果元素應被擦除,則返回 true 的謂詞 |
[編輯] 返回值
被刪除元素的數量。
[編輯] 複雜度
謂詞 pred 精確地被應用 c.size() 次。
異常
如果 erase_if
丟擲異常,則 c 保持有效但未指定(可能為空)狀態。
注意
該演算法是穩定的,即未被刪除的元素的順序保持不變。
[編輯] 示例
執行此程式碼
#include <iostream> #include <flat_set> void println(auto rem, auto const& container) { std::cout << rem << '{'; for (char sep[]{0, ' ', 0}; const auto& item : container) std::cout << sep << item, *sep = ','; std::cout << "}\n"; } int main() { std::flat_set data{3, 3, 4, 5, 5, 6, 6, 7, 2, 1, 0}; println("Original:\n", data); auto divisible_by_3 = [](auto const& x) { return (x % 3) == 0; }; const auto count = std::erase_if(data, divisible_by_3); println("Erase all items divisible by 3:\n", data); std::cout << count << " items erased.\n"; }
輸出
Original: {0, 1, 2, 3, 4, 5, 6, 7} Erase all items divisible by 3: {1, 2, 4, 5, 7} 3 items erased.
[編輯] 另請參閱
移除滿足特定標準的元素 (函式模板) | |
(C++20)(C++20) |
移除滿足特定標準的元素 (演算法函式物件) |