一、erase詞根
erasec++這個名字,顯然與C++中的std::erase函數有關。而這個函數就是按照給定的值或範圍刪除容器中的元素。
erasec++容器也是提供刪除元素的功能,但是更加靈活,可以根據條件刪除,也可以只刪除部分元素,而不是全部。
二、erase擦除命令
erasec++容器的核心是一個命令式的API,這個API可以擦除容器中的元素,提供類似shell命令的思想,讓API編寫更加清晰易懂。
下面是一個簡單的示例,我們定義了一個vector,其中存儲著一些數字,然後我們想要刪除其中小於10的元素,這樣可以得到一個新的vector:
std::vector<int> v{1, 2, 10, 3, 4, 5, 6, 10, 7, 8, 9}; auto new_v = erase_if(v, [](int i) { return i < 10; });
上面的代碼中,我們使用erase_if函數,其第一個參數表示被刪除元素所在的容器,第二個參數表示一個判斷函數,函數有一個參數,表示容器中的元素,如果函數返回true,表示需要刪除此元素。函數執行完成後,new_v中只保留了大於等於10的元素。
三、erase詞根詞綴記憶法
為了讓API更容易記憶,erasec++採用了詞根詞綴記憶法,每一個函數名都有erase詞根的前綴,表示該函數與擦除有關,然後再加上對應的詞綴表示具體所做的操作。
例如,如果要刪除容器中某個範圍內的元素,可以使用erase_range函數,如果需要按順序刪除容器中的元素,則可以使用erase_ordered函數。
四、代碼示例
下面是完整的代碼示例,展示了erasec++如何刪除vector中的元素:
#include <iostream> #include <vector> #include <algorithm> #include "erasec++.hpp" // 引入erasec++頭文件 int main() { std::vector<int> v{1, 2, 10, 3, 4, 5, 6, 10, 7, 8, 9}; // 刪除小於10的元素 auto new_v = erase_if(v, [](int i) { return i < 10; }); // 輸出新的vector for (auto i : new_v) { std::cout << i << " "; } std::cout << std::endl; // 刪除前三個元素 erase_head(v, 3); // 輸出新的vector for (auto i : v) { std::cout << i << " "; } std::cout << std::endl; // 刪除後三個元素 erase_tail(v, 3); // 輸出新的vector for (auto i : v) { std::cout << i << " "; } std::cout << std::endl; // 刪除指定範圍內的元素 erase_range(v, v.begin() + 2, v.begin() + 5); // 輸出新的vector for (auto i : v) { std::cout << i << " "; } std::cout << std::endl; // 按順序刪除vector中的元素 erase_ordered(v, {9, 4, 2}); // 輸出新的vector for (auto i : v) { std::cout << i << " "; } std::cout << std::endl; return 0; }
原創文章,作者:RDXYT,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/369418.html