目录
●find
●find_if
●adjacent_find
●binary_ search
●count
●count_if
●find
1.功能描述:
查找指定元素,如果找到则放回指定元素的迭代器,若未找到则返回结束迭代器。
2.查看find定义下底层代码的函数原型:
3.内置数据类型的查找:
向deque容器中插入5个元素,使用find去分别查询元素5和元素10是否在容器中。
#include<iostream>
#include<algorithm>
#include<deque>
using namespace std;
void find_func(deque<int>&d)
{
cout << "输入你要查找的元素:";
int n; cin >> n;
deque<int>::iterator p; //迭代器
p = find(d.begin(), d.end(), n); //内置数据类型查找
if (p != d.end())
cout << "找到该元素" << endl;
else
cout << "未找到该元素" << endl;
}
void text()
{
deque<int>d;
d.push_back(1);
d.push_back(2);
d.push_back(3);
d.push_back(4);
d.push_back(5);
//内置数据类型的查找
find_func(d);
}
int main()
{
text();
}
4.自定义数据类型的查找
向deque容器中插入已构造好的5个人,使用find去查询指定姓名和年龄下的这个人是否存在。
#include<iostream>
#include<algorithm>
#include<deque>
#include<string>
using namespace std;
class person {
public:
string name;
int age;
//构造函数(姓名+年龄)
person(string name, int age)
{
this->name = name;
this->age = age;
}
//重载operator== 让底层的find知道如何去对比person的数据类型
bool operator==(const person &p)
{
if (this->name==p.name&&this->age==p.age)
return 1;
else
return 0;
}
};
void find_func(deque<person>&d) //指定查找
{
cout << "请输入要查找的人的姓名:";
string name; cin >> name;
cout << "请输入要查找的人的年龄:";
int age; cin >> age;
person p_target(name,age); //通过构造函数将要查找的姓名和年龄
deque<person>::iterator p; //迭代器
p = find(d.begin(), d.end(), p_target); //查找,将会用到类里面我们重新重载的operator==
if (p != d.end())
cout << "找到该人" <<" "<< p->name << " " << p->age << endl;
else
cout << "未找到该人" << endl;
}
void text()
{
//通过person构造函数去创建5个人
person p1("张三", 19);
person p2("李四", 30);
person p3("王五", 40);
person p4("赵六", 29);
person p5("孙七", 20);
//将这5个人插入deque容器中
deque<person>d;
d.push_back(p1);
d.push_back(p2);
d.push_back(p3);
d.push_back(p4);
d.push_back(p5);
//进行指定查找
find_func(d);
}
int main()
{
text();
}
●find_if
1.功能描述:
按照条件去查找元素
2.查看find定义下底层代码的函数原型:
3.内置数据类型的条件查找:
向deque容器中插入5个元素,使用find_if去条件查询是否容器中有大于3的元素。
#include<iostream>
#include<deque>
#include<algorithm>
using namespace std;
class search_target_value {
public:
bool operator()(const int value)
{
return value > 3;
}
};
void find_if_func(deque<int>&d)
{
deque<int>::iterator p; //迭代器
p=find_if(d.begin(), d.end(), search_target_value()); //条件查询
if (p == d.end())
cout << "未找到这类元素" ;
else
cout << "找到这类元素" << endl;
}
void text()
{
deque<int>d;
d.push_back(1);
d.push_back(2);
d.push_back(3);
d.push_back(4);
d.push_back(5);
//内置数据类型查找
find_if_func(d);
}
int main()
{
text();
}
4.自定义类型的条件查找:
向deque容器中插入已构造好的5个人,使用find_if去条件查询年龄大于20下的人是否存在,并且输出这些人的姓名和年龄。
#include<iostream>
#include<deque>
#include<algorithm>
#include<string>
using namespace std;
class person {
public:
string name;
int age;
person(string name,int age)
{
this->name = name;
this->age = age;
}
};
class search_target_value {
public:
bool operator()(person &p) //在重载中指明是将年龄与20岁作比较,否则程序条件查询不能执行,程序错误
{
return p.age > 20;
}
};
void find_if_func(deque<person>&d)
{
deque<person>::iterator p; //迭代器
while(d.size()!=0)
{
p = find_if(d.begin(), d.end(), search_target_value()); //条件查询
if (p != d.end())
{
cout << "此人为:" << p->name << " " << p->age << endl;
}
int count=0; //计数
int begin_sign = d.begin()->age;//将每一次循环的容器队头元素下的年龄赋值在begin_sign下,从而用来下面的判断
p++;
while (p->age != begin_sign) //当此时指针p下指向的age的值不为begin_sign的值时,执行while循环
{
count++;
p--; //每一次的循环使指针前移
}
for(int j=1;j<=count;j++) //通过循环去执行count次出deque容器的操作
{
d.pop_front(); //出
}
}
}
void text()
{
//通过person构造函数去创建5个人
person p1("张三", 19);
person p2("李四", 30);
person p3("王五", 40);
person p4("赵六", 29);
person p5("孙七", 12);
//将这5个人插入deque容器中
deque<person>d;
d.push_back(p1);
d.push_back(p2);
d.push_back(p3);
d.push_back(p4);
d.push_back(p5);
//自定义数据类型查找
find_if_func(d);
}
int main()
{
text();
}
●adjacent_find
1.功能描述:
查找相邻重复元素
2.查看adjacent_find定义下底层代码的函数原型:
3.向deque容器中插入6个元素,使用adjacent_find去查找这6个元素中是否有相邻的重复元素,并且输出其相邻重复元素值。
#include<iostream>
#include<deque>
#include<algorithm>
using namespace std;
void adjacent_find_func(deque<int>&d)
{
deque<int>::iterator p;
p = adjacent_find(d.begin(), d.end()); //查找相邻重复元素,并且会返回相邻元素的第一个位置的迭代器
if (p != d.end())
cout << "找到相邻重复元素:" << *p << endl;
else
cout << "未找到相邻重复元素" << endl;
}
void text()
{
deque<int>d;
d.push_back(1);
d.push_back(2);
d.push_back(1);
d.push_back(3);
d.push_back(4);
d.push_back(4);
//查找相邻的重复元素 1 2 1 3 [4 4]
adjacent_find_func(d);
}
int main()
{
text();
}
●binary_ search
1.功能描述:
查找指定元素是否存在
2.查看binary_search定义下底层代码的函数原型:
3.向deque容器中顺序插入10个元素,使用binary_search去查找指定元素是否在容器中
#include<iostream>
#include<deque>
#include<algorithm>
using namespace std;
void binary_search_func(deque<int>&d)
{
cout << "请输入要查找的元素:";
int n; cin >> n;
//binary_search 查找返回的值为一个bool类型,而不是迭代器
bool ret = binary_search(d.begin(), d.end(),n);
if (ret == 1)
cout << "找到该元素" << endl;
else
cout << "未找到该元素" << endl;
}
void text()
{
deque<int>d;
for (int i = 1; i <= 10; i++)
{
d.push_back(i);
}
//binary_search底层代码是二分查找法,它操作的容器中元素必须为有序序列,无序的可能返回错误值
binary_search_func(d);
}
int main()
{
text();
}
●count
1.功能描述:
统计元素个数
2.查看count定义下底层代码的函数原型:
3.内置数据类型下deque容器中指定元素的判断与统计:
#include<iostream>
#include<deque>
#include<algorithm>
using namespace std;
void count_func(deque<int>&d)
{
cout << "输入要统计的元素:";
int n; cin >> n;
int num = count(d.begin(), d.end(), n);
if (num != 0)
cout << "该元素存在并且统计个数为:" << num << endl;
else
cout << "该元素不存在无法统计" << endl;
}
void text()
{
deque<int>d;
d.push_back(1);
d.push_back(2);
d.push_back(2);
d.push_back(3);
d.push_back(4);
count_func(d);
}
int main()
{
text();
}
4. 自定义数据类型的统计,输入一个新人(姓名+年龄),判断此刻deque容器中与该新人年龄相同的人是否存在并且统计其相同年龄人员个数:
#include<iostream>
#include<deque>
#include<algorithm>
#include<string>
using namespace std;
class person {
public:
string name;
int age;
person(string name,int age)
{
this->name = name;
this->age = age;
}
//自定义数据类型的统计需要重新去进行重载operator==
bool operator==(const person &p)
{
if (this->age == p.age)
return 1;
else
return 0;
}
};
void count_func(deque<person>&d)
{
cout << "请输入一个新人的姓名和年龄:";
string name; cin >> name;
int age; cin >> age;
person p(name, age);
int num = count(d.begin(), d.end(), p);
if (num != 0)
cout << "与该新人年龄相同的人存在,并且有" << num << "个" << endl;
else
cout << "与该新人年龄相同的人不存在" << endl;
}
void text()
{
person p1("张三", 19);
person p2("李四", 30);
person p3("王五", 40);
person p4("赵六", 40);
person p5("孙七", 12);
deque<person>d;
d.push_back(p1);
d.push_back(p2);
d.push_back(p3);
d.push_back(p4);
d.push_back(p5);
count_func(d);
}
int main()
{
text();
}
●count_if
1.功能描述:
按照条件去统计元素个数
2.查看count_if定义下底层代码的函数原型:
3.内置数据类型去条件统计deque容器中大于5的元素是否存在并且输出其有多少个。
#include<iostream>
#include<deque>
#include<algorithm>
using namespace std;
class statistics {
public:
bool operator()(int value)
{
return value > 5;
}
};
void find_if_func(deque<int>&d)
{
int num = count_if(d.begin(), d.end(), statistics());
if (num != 0)
cout << "大于5的元素存在,并且有" << num << "个" << endl;
else
cout << "大于5的元素不存在" << endl;
}
void text()
{
deque<int>d;
for (int i = 1; i <= 10; i++)
{
d.push_back(i);
}
//1 2 3 4 5 6 7 8 9 10
//内置数据类型的条件统计
find_if_func(d);
}
int main()
{
text();
}