c++ 中STL中find() find_if() remove() remove_if()的用法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c++ 中STL中find() find_if() remove() remove_if()的用法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2458字,纯文字阅读大概需要4分钟。
内容图文
![c++ 中STL中find() find_if() remove() remove_if()的用法](/upload/InfoBanner/zyjiaocheng/843/6e9068e3ce48407aa24a94fa497159be.jpg)
c++ 中STL中find() find_if() remove() remove_if()的用法
c++官网资料
介绍c++官网以及参考资料,相当于Linux下的man手册。
http://www.cplusplus.com/reference/,可以直接访问该网站进行资料的查阅,非常详细。
STL中find() find_if() remove() remove_if() 用法实例
#include <iostream>
#include <list>
#include <stdio.h>
#include <algorithm>
typedef struct Test
{
int test1;
float test2;
bool operator == (const Test &rhs) const
{
return (test1 == rhs.test1 && test2 == rhs.test2);
}
}Test;
bool IsFindIf(Test _st_test)
{
if(_st_test.test1 == 5 && _st_test.test2 == 5.0)
{
return true;
}
else
{
return false;
}
}
int main()
{
std::list<Test> list_test;
Test st_temp;
for(int i = 0;i< 6;i++)
{
st_temp.test1 = i;
st_temp.test2 = i / 1.0;
list_test.push_front(st_temp);
}
st_temp.test1 = 5;
st_temp.test2 = 5 / 1.0;
auto it1 = std::find(list_test.begin(),list_test.end(),st_temp);
if(it1 != list_test.end())
{
printf(" 1 %d %f \n",it1->test1,it1->test2);
}
else
{
printf("not find \n");
}
auto it2 = std::find_if(list_test.begin(),list_test.end(),IsFindIf);
if(it2 != list_test.end())
{
printf(" 2 %d %f \n",it2->test1,it2->test2);
}
else
{
printf("not find \n");
}
for(auto it_test : list_test)
{
printf("before %d %f \n",it_test.test1,it_test.test2);
}
auto it3 = std::remove_if(list_test.begin(),list_test.end(),IsFindIf);
if(it3 != list_test.end())
{
printf(" 3 %d %f \n",it3->test1,it3->test2);
}
else
{
printf("not find \n");
}
//remove remove_if 系列函数remove_if()并不会实际移除序列[start, end)中的元素;
//如果在一个容器上应用remove_if(), 容器的长度并不会改变(remove_if()不可能仅通过迭代器改变容器的属性),
//所有的元素都还在容器里面. 实际做法是, remove_if()将所有应该移除的元素都移动到了容器尾部并返回一个分界的迭代器.
//移除的所有元素仍然可以通过返回的迭代器访问到. 为了实际移除元素, 你必须对容器自行调用erase()以擦除需要移除的元素
list_test.erase(it3);
for(auto it_test : list_test)
{
printf("after %d %f \n",it_test.test1,it_test.test2);
}
printf("size is %d \n",list_test.size());
st_temp.test1 = 0;
st_temp.test2 = 0.0;
auto it4 = std::remove(list_test.begin(),list_test.end(),st_temp);
if(it4 != list_test.end())
{
printf(" 3 %d %f \n",it4->test1,it4->test2);
}
else
{
printf("not find \n");
}
list_test.erase(it4);
printf("size is %d \n",list_test.size());
}
STL 容器中end()含义
容器的end()方法,返回一个迭代器,需要注意:这个迭代器不指向实际的元素,而是表示末端元素的下一个元素,这个迭代器起一个哨兵的作用,表示已经处理完所有的元素。
因此,在查找的时候,返回的迭代器,不等于end(),说明找到了目标。等于end(),说明检查了所有元素,没有找到目标。
内容总结
以上是互联网集市为您收集整理的c++ 中STL中find() find_if() remove() remove_if()的用法全部内容,希望文章能够帮你解决c++ 中STL中find() find_if() remove() remove_if()的用法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。