一、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; }