//----------------------------------------------------------------------------------------
// Desc: STL search() used in vector container and struct data
// Author: spring brother
// Data: 2018.3.24
// Copyright (C) 2018 spring brother
//----------------------------------------------------------------------------------------
/*
查找子序列的算法
search(beg1,end1,beg2,end2)
search(beg1,end1,beg2,end2,binaryPred)
返回第二个输入范围(子序列)在第一个输入范围中第一次出现的位置。如果未找到子序列,则返回end1。
find_first_of(beg1,end1,beg2,end2)
find_first_of(beg1,end1,beg2,end2,binaryPred)
返回一个迭代器,指向第二个输入范围中任意元素在第一个范围中首次出现的位置。如果未找到匹配元素,则返回end1。
find_end(beg1,end1,beg2,end2)
find_end(beg1,end1,beg2,end2,binaryPred)
类似search,但是返回的是最后一次出现的位置。如果第二个输入范围为空,或者在第一个输入范围中未找到它,则返回end1。
*/
#include "stdafx.h"
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
bool isEqual(int &i, int &j) {
return i == j / 2;
}
int main()
{
int arrIn[6] = { 1,2,4,4,4,5 };
int arrSub[3] = { 2,4,4 };
vector<int> vecIn(arrIn, arrIn + 6);
vector<int> vecSub(arrSub, arrSub + 3);
vector<int>::iterator it = search(vecIn.begin(), vecIn.end(), vecSub.begin(), vecSub.end()); //search
if (it != vecIn.end()) {
cout << "search = " << *it << endl;
}
it = search(vecIn.begin(), vecIn.end(), vecSub.begin(), vecSub.end()-1,isEqual); //search,传入仿函数
if (it != vecIn.end()) {
cout << "search = " << *it << endl;
}
it = search(vecIn.begin(), vecIn.end(), vecSub.begin(), vecSub.end()-1, [](int &i, int &j) {return i == j / 2; }); //search,传入仿函数
if (it != vecIn.end()) {
cout << "search = " << *it << endl;
}
int arrSub_1[3] = { 7,8,5 };
vector<int> vecSub_1(arrSub_1, arrSub_1 + 3);
it = find_first_of(vecIn.begin(), vecIn.end(), vecSub_1.begin(), vecSub_1.end()); //find_first_of
if (it != vecIn.end()) {
cout << "find_first_of = " << *it << endl;
}
it = find_first_of(vecIn.begin(), vecIn.end(), vecSub_1.begin(), vecSub_1.end() - 1, isEqual); //find_first_of,传入仿函数
if (it != vecIn.end()) {
cout << "find_first_of = " << *it << endl;
}
it = find_first_of(vecIn.begin(), vecIn.end(), vecSub_1.begin(), vecSub_1.end() - 1, [](int &i, int &j) {return i == j / 7; }); //find_first_of,传入仿函数
if (it != vecIn.end()) {
cout << "find_first_of = " << *it << endl;
}
it = find_end(vecIn.begin(), vecIn.end(), vecSub.begin(), vecSub.end()); //find_end
if (it != vecIn.end()) {
cout << "find_end = " << *it << endl;
}
it = find_end(vecIn.begin(), vecIn.end(), vecSub.begin(), vecSub.end() - 1, isEqual); //find_end,传入仿函数
if (it != vecIn.end()) {
cout << "find_end = " << *it << endl;
}
it = find_end(vecIn.begin(), vecIn.end(), vecSub.begin(), vecSub.end() - 1, [](int &i, int &j) {return i == j / 2; }); //find_end,传入仿函数
if (it != vecIn.end()) {
cout << "find_end = " << *it << endl;
}
return 0;
}
相关文章
- c/c++ 算法之求连续子数组的最大和
- C++ 树进阶系列之平衡二叉查找树( AVL)的自平衡算法
- 算法竞赛进阶指南--在单调递增序列a中查找小于等于x的数中最大的一个(即x或x的前驱)
- 红黑树之 原理和算法详细介绍(阿里面试-treemap使用了红黑树) 红黑树的时间复杂度是O(lgn) 高度<=2log(n+1)1、X节点左旋-将X右边的子节点变成 父节点 2、X节点右旋-将X左边的子节点变成父节点
- Ruby实现的最长公共子序列算法
- Python查找两个有序列表中位数的方法【基于归并算法】
- 【数据结构与算法之美】二分查找(下):如何快速定位IP对应的省份地址?
- Python查找算法之插补查找算法的实现
- Python查找算法之折半查找算法的实现
- Python查找最长不包含重复字符的子字符串算法示例