search容器中第一个{11,1,2』语法格式
C++ search()函数用法详解(深入理解,一字社会)
1 search() 语法格式
与 find_end() 一样,search() 函数也提供以下两种语法格式:
//查找 [first1, last1) 范围内第一个 [first2, last2) 子序列
ForwardIterator search (ForwardIterator first1, ForwardIterator last1,
ForwardIterator first2, ForwardIterator last2);
//查找 [first1, last1) 范围内,和 [first2, last2) 序列满足 pred 规则的第一个子序列
ForwardIterator search (ForwardIterator first1, ForwardIterator last1,
ForwardIterator first2, ForwardIterator last2,
BinaryPredicate pred);
其中,各个参数的含义为:
其实第一种语法格式也可以看成是包含了一个默认的pred参数,它指定了一个相等规则一次函数教案格式,即查找范围内[first1,last1)和[first2,last<@中的每个元素2) 对应相等的子序列;并且借助第二种语法格式,我们可以自定义当前场景所需的匹配规则。
同时一次函数教案格式,search() 函数将返回一个前向迭代器。当函数搜索成功时,迭代器指向找到的子序列中的第一个元素;否则,如果搜索失败,则迭代器指向的 last1 迭代器是相同的。
2 搜索()示例
#include // std::cout
#include // std::search
#include // std::vector
using namespace std;
//以普通函数的形式定义一个匹配规则
bool mycomp1(int i, int j) {
return (i % j == 0);
}
//以函数对象的形式定义一个匹配规则
class mycomp2 {
public:
bool operator()(const int& i, const int& j) {
return (i % j == 0);
}
};
int main() {
vector myvector{ 1,2,3,4,8,12,18,12,18,1,2,3 };
int myarr[] = { 12,18,1 };
//调用第一种语法格式
vector::iterator it = search(myvector.begin(), myvector.end(), myarr, myarr+3);
if (it != myvector.end()) {
cout << "第一个{12,18,1}的起始位置为:" << it - myvector.begin() << " ,*it = " << *it << endl;
}
int myarr2[] = { 18,1,2 };
//调用第二种语法格式
it = search(myvector.begin(), myvector.end(), myarr2, myarr2 + 3, mycomp2());
if (it != myvector.end()) {
cout << "第一个{18,1,2}的起始位置为:" << it - myvector.begin() << " ,*it = " << *it;
}
return 0;
}
2.1 第一种语法格式
下面是两个例子:
示例1:从程序的执行结果可以看出search()函数在myvector容器中找到了第一个{1,2,6},起始位置下标为9,可以被myvector容器下标9、@ >10、11 找到对应的1,2,6。
例2:从程序的执行结果可以看出search()函数在myvector容器中找到了第一个{11,1,2},起始位置下标为8,可以通过myvector下标容器 8、@ >9、@>10 找到对应的 11,1,2。
示例 3:如果没有找到则不返回
#include // std::cout
#include // std::search
#include // std::vector
using namespace std;
int main() {
vector myvector{ 1,2,3,4,8,12,18,12,18,1,2,6 };
int myarr[] = { 1,2,6 };
//调用第一种语法格式
vector::iterator it = search(myvector.begin(), myvector.end(), myarr, myarr+3);
if (it != myvector.end()) {
cout << "第一个{1,2,6}的起始位置为:" << it - myvector.begin() << " ,*it = " << *it << endl;
}
return 0;
}
#include // std::cout
#include // std::search
#include // std::vector
using namespace std;
int main() {
vector myvector{ 1,2,3,4,8,12,18,12,11,1,2,6 };
int myarr[] = { 11,1,2 };
//调用第一种语法格式
vector::iterator it = search(myvector.begin(), myvector.end(), myarr, myarr+3);
if (it != myvector.end()) {
cout << "第一个{11,1,2}的起始位置为:" << it - myvector.begin() << " ,*it = " << *it << endl;
}
return 0;
}
//不返回值
int myarr[] = { 1,2,100 };
//调用第一种语法格式
vector::iterator it = search(myvector.begin(), myvector.end(), myarr, myarr + 3);
if (it != myvector.end()) {
cout << "第一个{11,1,2}的起始位置为:" << it - myvector.begin() << " ,*it = " << *it << endl;
}
2.2 第二种语法格式
第二条语法定制规则就不介绍了,因为感觉有点鸡肋。
http://www.jiaoanw.com/%E6%95%99%E6%A1%88%E6%A0%BC%E5%BC%8F/article-455940-1.html
http://www.jiaoanw.com/
true
教案网
http://www.jiaoanw.com/%E6%95%99%E6%A1%88%E6%A0%BC%E5%BC%8F/article-455940-1.html
report
4238
search()函数用法详解(深入了解,一文学会)目录种语法格式:中各个元素对应相等的子序列;而借助第二种语法格式,我们可以自定义一个当前场景需要的匹配规则。第一种语法格式下面有两个示例:myvector容器下标9、10、11来找到对应的1,2,6。myvector容器下标8、9、10来找到对应的11,1,2。第二种语法格式第二种语法自定义规则,不做介绍因为感觉有点鸡肋。
早上喝两包压压惊