首页 > 技术文章 > STL之search

andrew3 2018-04-20 23:30 原文

描述

使用STL中的search函数,判断一个序列是否是另一个序列的子序列。

部分代码已经给出,请补充完整,提交时请勿包含已经给出的代码。

 

int main()
{
    vector<int> vec1, vec2;
    int n, m, a;
    cin>>n>>m;
    while(n--)
    {
        cin>>a;
        vec1.push_back(a);
    }
    while(m--)
    {
        cin>>a;
        vec2.push_back(a);
    }
    Check(vec1, vec2);
    return 0;
}

输入

第一行为一个正整数n和m,n和m为元素个数(n<=1000)。

第二行有n个整数,表示序列1的所有元素。

第三行有m个整数,表示序列2的所有元素。

输出

如果序列2是序列1的子序列,则输出所在子序列的始末位置。

否则输出None。

样例输入

 5 2
1 3 2 4 5
3 2

样例输出

 2 3

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
void Check(vector<int > &vec1,vector<int> &vec2)
{
    vector<int >::iterator iter1,iter2;
    int k=0;
    for(iter2=vec2.begin();iter2!=vec2.end();iter2++)
        k++;
    iter1=search(vec1.begin(),vec1.end(),vec2.begin(),vec2.end());
    if(iter1!=vec1.end()) cout<<int(iter1-vec1.begin())+1<<" "<<int(iter1-vec1.begin())+k<<endl;
    else cout<<"None"<<endl;
}
int main()
{
    vector<int> vec1, vec2;
    int n, m, a;
    cin>>n>>m;
    while(n--)
    {
        cin>>a;
        vec1.push_back(a);
    }
    while(m--)
    {
        cin>>a;
        vec2.push_back(a);
    }
    Check(vec1, vec2);
    return 0;
}

 

 

推荐阅读