vector删除指定元素

vector删除指定元素

直奔主题,下面以vector为例。

vector是C++中的一个动态数组类型,它用size()来返回当前存储的元素数量,用capacity()返回容器当前可容纳的元素数量。

接口介绍

vector是非常常用的顺序容器,删除元素可以用到下面这些接口。

  • pop_front() 删除首元素
  • pop_back() 删除尾元素
  • erase(p) 删除迭代器指定的元素,返回值为所删除元素的下一个元素的迭代器
  • erase(b, e) 删除迭代器b和e所指定范围的元素
  • clear() 删除所有元素,返回void

遍历删除

以下面这个为例,删除一个vector中数值为4的数字。

1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
std::vector<int> vec = {1, 2, 3, 4, 5};
std::vector<int>::iterator iter = vec.begin();
while (iter != vec.end()) {
if (*iter == 4)
iter = vec.erase(iter);
else
iter++;
}
printf("%d", vec.size());
std::cin.get();
}

使用Lambda表达式

1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
std::vector<int> vec = {1, 2, 3, 4, 5};

int value = 4;
auto filter = [&value](int val) {
return value == val;
};
vec.erase(std::remove_if(vec.begin(), vec.end(), filter), vec.end());

printf("%d", vec.size());
}

std::remove_if(begin, end, fun)接收三个入参:

  1. begin迭代器开始位置
  2. end迭代器结束位置
  3. fun回调函数,如果函数返回为真,则将当前所指向的参数移到尾部。

std::remove_if(begin, end, fun)返回值为被移除区域的首个元素。

通过Lambda表达式和remove_if结合可以在容器中找到满足条件的元素,再结合erase删除指定元素。



关注博客或微信搜索公众号多媒体与图形,获取更多内容,欢迎在公众号留言交流!
扫一扫关注公众号
作者

占航

发布于

2022-07-24

更新于

2023-10-04

许可协议

相关文章

评论