C++ 算法 search_n()函数

C++ 算法 search_n()函数

C++算法search_n()函数用于在容器[first, last)中搜索连续出现count个元素的序列,每个元素都经过检查以判断是否满足给定的pred。返回满足条件的第一个元素的迭代器,如果找不到,则返回最后一个元素的迭代器。

语法

template<class ForwardIterator,class Size,class T> ForwardIterator search_n(ForwardIterator first, ForwardIterator last,  Size count, const T&val);
template<class ForwardIterator, class Size, class T, class BinaryPredicate> ForwardIterator search_n ( ForwardIterator first, ForwardIterator last, Size count, const T& val, BinaryPredicate pred);

参数

first :它是指向范围的第一个元素的前向迭代器,元素本身包含在范围内。

last :它是指向范围的最后一个元素的前向迭代器,元素本身不包含在范围内。

count :它给出了应该与条件匹配的最少元素数量。

val :该参数指定了用于在范围上应用search_n函数的条件值或pred条件。

pred :它是一个二元函数,接受两个参数并返回一个布尔值结果。

返回值

如果找到与pred匹配的第一个元素,则函数返回一个指向该元素的迭代器;如果找不到这样的元素,则返回一个指向最后一个元素的迭代器。

示例1

#include<iostream>
#include<algorithm>
#include<vector>
bool newpred(int m, int n)
{
    return(m==n);
}
int main()
{
    int newints[]={40,50,60,60,50,40,40,50};
    std::vector<int> newvector(newints, newints+8);
    std::vector<int>::iterator ti;
    ti=std::search_n (newvector.begin(),newvector.end(),2,60);
    if(ti!=newvector.end())
    std::cout<<"Two times 60 has been found at position"<<(ti-     newvector.begin())<<"\n";
    else
    std::cout<<"No match of 60 has been found \n";
    return 0;
}

输出结果:

Two times 60 has been at position 2

示例2

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool newpred(int m, int n)
{
    return(m==n);
}
int main()
{
    int m, n;
    vector<int> u1 = { 11, 22, 33, 44, 55, 33, 33, 66, 77 };
    int u2 = 33;
    vector<int>::iterator ti;
    ti = std::search_n(u1.begin(), u1.end(), 2, u2, newpred);
    if (ti!= u1.end()) 
    {
        cout << "Value u2 has been found at position "
             << (ti - u1.begin());
    } 
    else 
    {
        cout << "Value u2 is not present"
             << "in vector u1";
    }
    return 0;
}

输出结果:

Value u2 has been found at position 5

复杂性

从第一个元素到最后一个元素的函数复杂性是线性的。

数据竞争

一些或所有的容器对象被访问。

异常

如果容器的任何元素引发异常,该函数将抛出异常。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程