//----------------------------------------------------------------------------------------
// 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++修炼》卷三·天劫试炼(37)诛仙四剑破子串 - 最长公共子序列(LCS)
- 二分查找(折半查找) -- 已排序序列的查找算法
- 算法复习周------“动态规划之‘最长公共子序列’”&&《计蒜课》---最长公共子串题解
- 程序员的算法课(6)-最长公共子序列(LCS)
- QT五子棋项目详解之六:AI启发式搜索:剪枝算法的更一步优化
- c/c++ 算法之求连续子数组的最大和
- C++ 树进阶系列之平衡二叉查找树( AVL)的自平衡算法
- 算法竞赛进阶指南--在单调递增序列a中查找小于等于x的数中最大的一个(即x或x的前驱)
- 红黑树之 原理和算法详细介绍(阿里面试-treemap使用了红黑树) 红黑树的时间复杂度是O(lgn) 高度<=2log(n+1)1、X节点左旋-将X右边的子节点变成 父节点 2、X节点右旋-将X左边的子节点变成父节点
- Ruby实现的最长公共子序列算法