std::vector 去除另一个 std::vector 子集
时间: 2024-05-10 14:12:14 浏览: 17
要去除另一个 std::vector 的子集,可以使用 STL 中的 std::remove_if 算法结合 lambda 表达式来实现。具体步骤如下:
1. 使用 std::sort 对两个 vector 进行排序。
2. 使用 std::unique 对两个 vector 去重。
3. 使用 std::remove_if 结合 lambda 表达式,删除子集中的元素。
4. 使用 std::vector 的 erase 方法删除被删除的元素。
以下是示例代码:
```
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec1 { 1, 2, 3, 4, 5, 6, 7 };
std::vector<int> vec2 { 2, 4, 6 };
// 排序并去重
std::sort(vec1.begin(), vec1.end());
std::sort(vec2.begin(), vec2.end());
vec1.erase(std::unique(vec1.begin(), vec1.end()), vec1.end());
vec2.erase(std::unique(vec2.begin(), vec2.end()), vec2.end());
// 删除子集中的元素
auto it = std::remove_if(vec1.begin(), vec1.end(), [&vec2](int i) {
return std::binary_search(vec2.begin(), vec2.end(), i);
});
vec1.erase(it, vec1.end());
// 输出结果
for (int i : vec1) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)