vector的find函数用法(一)
vector的find函数用法详解
1. 基本用法
vector是C++标准库中的一个容器,提供了一系列用于操作动态数组的函数,其中之一就是find函数。
find函数的基本用法如下:
iterator find (iterator first, iterator last, const T& val);
其中,first是指向容器中要搜索的起始位置的迭代器,last是指向要搜索的结束位置的迭代器(不包含在搜索范围内),val则是要搜索的值。
find函数会在指定范围内搜索指定的值,并返回一个指向第一个匹配元素的迭代器。如果未到匹配的元素,则返回指向结束位置的迭代器。
2. 示例演示
假设我们有一个存储整数的vector容器如下:
std::vector<int> numbers = {1, 5, 10, 15, 20};
以下是vector的find函数的一些示例用法:
•到元素1的位置:
auto it = std::find((), (), 1);
这里使用find函数在numbers容器中查值为1的元素。如果到了匹配的元素,it将指向该元素的位置;如果不到,it将指向(),即结束位置的迭代器。
•判断元素是否存在:
bool found = (std::find((), (), 10) != ());
这里将find函数的返回值与()比较,如果两者相等,则说明没到匹配的元素;否则,到了匹配的元素。
•使用find函数进行范围搜索:
std::vector<int> searchRange = {10, 15};
auto it = std::find((), (), ());
auto itEnd = std::find((), (), ());
auto result = std::find(it, itEnd, ());
这里我们定义了一个searchRange存储要搜索的元素范围(10和15)。首先,我们使用find函数分别到了searchRange范围内第一个元素(10)和最后一个元素(15)的位置。然后,我们使用第一个元素的位置(it)和最后一个元素的位置(itEnd)作为搜索范围,在这个范围内使用find函数搜索第一个元素(10)的位置,返回的迭代器将指向匹配元素的位置。
•搜索自定义类型的元素:
struct Person {
std::string name;
int age;
};
std::vector<Person> people = {{"Alice", 25}, {"Bob", 30}, {"John", 35}};
std::string nameToFind = "Bob";
auto it = std::find((), (), [&](const Person& p) { return == nameToFind; });
这里我们定义了一个自定义类型Person,其中包含名字和年龄。我们使用find函数在people容器中搜索名字为”Bob”的人。在find函数的第三个参数中,我们使用lambda表达式作为搜索条件,判断当前元素的名字是否等于nameToFind。如果到了匹配的元素,it将指向该元素的位置;如果不到,it将指向()。
3. 总结
vector的find函数是一个方便的工具,可以帮助我们在容器中搜索指定的元素。通过使用不同的参数和搜索条件,我们可以灵活地使用find函数来满足不同的需求。
4. 搜索最后一个匹配元素
除了搜索第一个匹配的元素外,vector的find函数还提供了搜索最后一个匹配元素的功能。
iterator find_end(iterator first1, iterator last1, iterator first2, iterator last2);
其中,first1和last1表示要搜索的范围,first2和last2表示要搜索的目标范围。函数将在first1和last1内搜索整个目标范围(first2到last2的子序列),并返回指向最后一个匹配子序列的起始位置的迭代器,如果未到匹配的子序列,则返回指向(last1 - (last2 - first2) + 1)位置的迭代器,即结束位置的迭代器。
示例用法:
假设有两个字符串容器source和target:
std::vector<std::string> source = {"hello", "world", "hello", "world"};
std::vector<std::string> target = {"hello", "world"};
我们可以使用find_end函数来搜索source容器中最后一个与target容器完全相同的子序列:
auto it = std::find_end((), (), (), ());
如果到了匹配的子序列,it将指向source容器中最后一个匹配子序列的起始位置。如果不到,it将指向source容器的结束位置。
5. 按条件搜索
除了按照固定的值进行搜索外,vector的find函数还支持按照自定义的条件进行搜索。
template autoit<class InputIterator, class UnaryPredicate>
InputIterator find_if (InputIterator first, InputIterator last, UnaryPredicate pred);
其中,first和last表示要搜索的范围,pred是一个一元谓词函数,它将应用于范围内的每个元素。函数将在first和last内搜索满足条件的第一个元素,并返回指向该元素的迭代器。如果未到满足条件的元素,则返回指向last位置的迭代器。
示例用法:
假设有一个存储整数的vector容器numbers:
std::vector<int> numbers = {1, 2, 3, 4, 5};
我们可以使用find_if函数来搜索大于3的第一个元素:
auto it = std::find_if((), (), [](int num) { return num > 3; });
这里我们使用lambda表达式作为条件谓词函数,判断当前元素num是否大于3。如果到了满足条件的元素,it将指向该元素的位置;如果不到,it将指向容器的结束位置。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论