std::vector 判断两个元素相等 并删除其中一个元素
时间: 2024-01-22 09:02:42 浏览: 45
可以使用 std::remove_if 算法结合 lambda 表达式来实现:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {1, 2, 3, 2, 4, 5, 2};
vec.erase(std::remove_if(vec.begin(), vec.end(), [&](int x) {
return x == 2 && std::count(vec.begin(), vec.end(), 2) > 1;
}), vec.end());
for (auto x : vec) {
std::cout << x << " ";
}
std::cout << std::endl;
return 0;
}
```
以上代码中,lambda 表达式中的 x == 2 && std::count(vec.begin(), vec.end(), 2) > 1 表示只有当 x 的值为 2,且在整个 vector 中 2 的个数大于 1 时才返回 true,也就是只删除其中一个 2。
执行结果:
```
1 3 2 4 5
```
相关问题
std::vector 判断两个元素相等 并删除其中一个元素 迭代器方法
可以利用 std::remove_if 和 lambda 表达式来实现。
假设我们要删除所有值为 value 的元素,代码如下:
```cpp
std::vector<int> vec = {1, 2, 3, 2, 4, 5, 2};
int value = 2;
vec.erase(std::remove_if(vec.begin(), vec.end(), [value](int x){ return x == value; }), vec.end());
```
在 lambda 表达式中,我们定义了一个匿名函数,它接受一个整数参数 x,如果 x 等于 value,则返回 true,表示需要删除该元素,否则返回 false,表示保留该元素。
std::remove_if 的返回值是一个迭代器,指向被删除元素的下一个元素,我们将其作为 vec.erase 的第一个参数,表示从这个位置开始删除到末尾。
因此,以上代码的执行结果是:
```cpp
{1, 3, 4, 5}
```
这个方法可以用于任意类型的元素,只需要在 lambda 表达式中修改判断条件即可。
std::vetcor 判断两个元素相等
std::vector没有直接判断两个元素相等的函数,但可以使用std::equal函数来判断两个vector是否相等。
示例代码:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v1 = {1, 2, 3};
std::vector<int> v2 = {1, 2, 3};
std::vector<int> v3 = {1, 2, 4};
bool isEqual1 = std::equal(v1.begin(), v1.end(), v2.begin());
bool isEqual2 = std::equal(v1.begin(), v1.end(), v3.begin());
std::cout << std::boolalpha << isEqual1 << std::endl; //true
std::cout << std::boolalpha << isEqual2 << std::endl; //false
return 0;
}
```
在上面的示例代码中,我们使用std::equal函数分别判断了v1和v2、v1和v3是否相等。其中,std::boolalpha是一个输出流格式标记,将bool类型的值以true或false形式输出。
阅读全文