ゼロ、見つける
機能の説明:
- 指定された要素を検索し、指定された要素を返すイテレータを検索し、endを返すイテレータを検索します。end()
関数プロトタイプ:
-
find(iterator beg, iterator end, value);
//値で要素を検索し、指定された位置に戻るイテレータを検索し、最後に戻るイテレータを検索します
// begがイテレータを開始します
//終了はイテレータを終了します
//要素を見つけるための値
例:
#include <algorithm>
#include <vector>
#include <string>
void test01() {
vector<int> v;
for (int i = 0; i < 10; i++) {
v.push_back(i + 1);
}
//查找容器中是否有 5 这个元素
vector<int>::iterator it = find(v.begin(), v.end(), 5);
if (it == v.end())
{
cout << "没有找到!" << endl;
}
else
{
cout << "找到:" << *it << endl;
}
}
class Person {
public:
Person(string name, int age)
{
this->m_Name = name;
this->m_Age = age;
}
//重载==
bool operator==(const Person& p)
{
if (this->m_Name == p.m_Name && this->m_Age == p.m_Age)
{
return true;
}
return false;
}
public:
string m_Name;
int m_Age;
};
void test02() {
vector<Person> v;
//创建数据
Person p1("aaa", 10);
Person p2("bbb", 20);
Person p3("ccc", 30);
Person p4("ddd", 40);
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
v.push_back(p4);
vector<Person>::iterator it = find(v.begin(), v.end(), p2);
if (it == v.end())
{
cout << "没有找到!" << endl;
}
else
{
cout << "找到姓名:" << it->m_Name << " 年龄: " << it->m_Age << endl;
}
}
総括する:
findを使用してカスタム型を検索するには、必ず==演算子をオーバーロードしてください。
findを使用して、コンテナー内の指定された要素を検索します。戻り値はイテレーターです。
一、find_if
機能の説明:
- 条件で要素を検索
関数プロトタイプ:
-
find_if(iterator beg, iterator end, _Pred);
//値で要素を検索し、指定された位置に戻るイテレータを検索し、最後に戻るイテレータを検索します
// begがイテレータを開始します
//終了はイテレータを終了します
// _Pred関数または述語(bool型ファンクターを返す)
例:
#include <algorithm>
#include <vector>
#include <string>
//内置数据类型
class GreaterFive
{
public:
bool operator()(int val)
{
return val > 5;
}
};
void test01() {
vector<int> v;
for (int i = 0; i < 10; i++) {
v.push_back(i + 1);
}
vector<int>::iterator it = find_if(v.begin(), v.end(), GreaterFive());
if (it == v.end()) {
cout << "没有找到!" << endl;
}
else {
cout << "找到大于5的数字:" << *it << endl;
}
}
//自定义数据类型
class Person {
public:
Person(string name, int age)
{
this->m_Name = name;
this->m_Age = age;
}
public:
string m_Name;
int m_Age;
};
class Greater20
{
public:
bool operator()(Person &p)
{
return p.m_Age > 20;
}
};
void test02() {
vector<Person> v;
//创建数据
Person p1("aaa", 10);
Person p2("bbb", 20);
Person p3("ccc", 30);
Person p4("ddd", 40);
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
v.push_back(p4);
vector<Person>::iterator it = find_if(v.begin(), v.end(), Greater20());
if (it == v.end())
{
cout << "没有找到!" << endl;
}
else
{
cout << "找到姓名:" << it->m_Name << " 年龄: " << it->m_Age << endl;
}
}
int main() {
//test01();
test02();
system("pause");
return 0;
}
概要:条件によるfind_if検索により、検索がより柔軟になり、提供されたファンクターはさまざまな戦略を変更できます
2、隣接する_find
機能の説明:
- 隣接する重複要素を見つける
関数プロトタイプ:
-
adjacent_find(iterator beg, iterator end);
//隣接する繰り返し要素を見つけて、イテレータを隣接する要素の最初の位置に戻します
// begがイテレータを開始します
//終了はイテレータを終了します
例:
#include <algorithm>
#include <vector>
void test01()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(5);
v.push_back(2);
v.push_back(4);
v.push_back(4);
v.push_back(3);
//查找相邻重复元素
vector<int>::iterator it = adjacent_find(v.begin(), v.end());
if (it == v.end()) {
cout << "找不到!" << endl;
}
else {
cout << "找到相邻重复元素为:" << *it << endl;
}
}
三、binary_search
機能の説明:
- 指定された要素が存在するかどうかを確認します
関数プロトタイプ:
-
bool binary_search(iterator beg, iterator end, value);
//指定された要素を検索し、見つかった場合はtrueを返し、それ以外の場合はfalseを返します
//注:順序付けられていない順序では使用できません
// begがイテレータを開始します
//終了はイテレータを終了します
//要素を見つけるための値
例:
#include <algorithm>
#include <vector>
void test01()
{
vector<int>v;
for (int i = 0; i < 10; i++)
{
v.push_back(i);
}
//二分查找
bool ret = binary_search(v.begin(), v.end(),2);
if (ret)
{
cout << "找到了" << endl;
}
else
{
cout << "未找到" << endl;
}
}
int main() {
test01();
system("pause");
return 0;
}
**概要:**二分探索法は非常に効率的です。検索コンテナ内の要素の順序付けられたシーケンスは次のようにする必要があることに注意してください。
四、数える
機能の説明:
- 要素の数を数える
関数プロトタイプ:
-
count(iterator beg, iterator end, value);
//要素の出現回数をカウントします
// begがイテレータを開始します
//終了はイテレータを終了します
//値の統計要素
例:
#include <algorithm>
#include <vector>
//内置数据类型
void test01()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(4);
v.push_back(5);
v.push_back(3);
v.push_back(4);
v.push_back(4);
int num = count(v.begin(), v.end(), 4);
cout << "4的个数为: " << num << endl;
}
//自定义数据类型
class Person
{
public:
Person(string name, int age)
{
this->m_Name = name;
this->m_Age = age;
}
bool operator==(const Person & p)
{
if (this->m_Age == p.m_Age)
{
return true;
}
else
{
return false;
}
}
string m_Name;
int m_Age;
};
void test02()
{
vector<Person> v;
Person p1("刘备", 35);
Person p2("关羽", 35);
Person p3("张飞", 35);
Person p4("赵云", 30);
Person p5("曹操", 25);
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
v.push_back(p4);
v.push_back(p5);
Person p("诸葛亮",35);
int num = count(v.begin(), v.end(), p);
cout << "num = " << num << endl;
}
int main() {
//test01();
test02();
system("pause");
return 0;
}
概要: カスタムデータ型をカウントするときは、オーバーロードに協力する必要があります operator==
五、count_if
機能の説明:
- 条件に応じて要素の数を数える
関数プロトタイプ:
-
count_if(iterator beg, iterator end, _Pred);
//条件に従って要素の出現数をカウントします
// begがイテレータを開始します
//終了はイテレータを終了します
// _ Pred述語
例:
#include <algorithm>
#include <vector>
class Greater4
{
public:
bool operator()(int val)
{
return val >= 4;
}
};
//内置数据类型
void test01()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(4);
v.push_back(5);
v.push_back(3);
v.push_back(4);
v.push_back(4);
int num = count_if(v.begin(), v.end(), Greater4());
cout << "大于4的个数为: " << num << endl;
}
//自定义数据类型
class Person
{
public:
Person(string name, int age)
{
this->m_Name = name;
this->m_Age = age;
}
string m_Name;
int m_Age;
};
class AgeLess35
{
public:
bool operator()(const Person &p)
{
return p.m_Age < 35;
}
};
void test02()
{
vector<Person> v;
Person p1("刘备", 35);
Person p2("关羽", 35);
Person p3("张飞", 35);
Person p4("赵云", 30);
Person p5("曹操", 25);
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
v.push_back(p4);
v.push_back(p5);
int num = count_if(v.begin(), v.end(), AgeLess35());
cout << "小于35岁的个数:" << num << endl;
}
int main() {
//test01();
test02();
system("pause");
return 0;
}
**概要:**値による統計にはcountを使用し、条件による統計にはcount_ifを使用します