建议直接看最后的结论

题目描述

输入 n 个不超过 10^9 的单调不减的(就是后面的数字不小于前面的数字)非负整数,然后进行 m 次询问。对于每次询问,给出一个整数 q,要求输出这个数字在序列中第一次出现的编号,如果没有找到的话输出 -1 。

输入格式

第一行 2 个整数 n 和 m,表示数字个数和询问次数。

第二行 n 个整数,表示这些待查询的数字。

第三行 m 个整数,表示询问这些数字的编号,从 1 开始编号。

输出格式

输出一行,m 个整数,以空格隔开,表示答案。

样例 #1

样例输入 #1

11 3
1 3 3 3 5 7 9 11 13 15 15
1 3 6

样例输出 #1

1 2 -1

关于find函数的返回值问题

上面是今天算法实验的第一道题目,我开始时打算使用vector类型来存储数据

在用迭代器遍历完之后,我想到了find函数

find函数只需要输入首尾迭代器以及需要查找的元素即可

但是,当所查容器中含有多个需要查找的元素时,会怎么样呢?

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main(int argc, char const *argv[])
{
int num,ask_time_;
cin>>num>>ask_time_;
vector<int> num_vector;
for (size_t i = 0; i < num; i++)
{
int n;
cin>>n;
num_vector.push_back(n);
}
vector<int> num_asked_;
for (size_t i = 0; i < ask_time_; i++)
{
int n;
cin>>n;
num_asked_.push_back(n);
}
vector<int> out;
for (auto it = num_asked_.begin(); it !=num_asked_.end(); it++)
{
vector<int>::iterator i;
i = find(num_vector.begin(),num_vector.end(),(*it));
out.push_back((int)(i-num_vector.begin()));
}
for (auto i = 0; i < out.size(); i++)
{
cout<<out[i]<<" ";
}


return 0;
}

示例的输出为:

0 1 11 

显然,这是存在问题的

结论

后面我单独测试find时发现存在多个相同元素时,它会返回最后一个元素的迭代器,但是这个和上面第二个输出不符;当查找元素不在容器中时,会返回你输入的结束迭代器。

第二个输出的问题还是没有想到是为什么

另外,这个题不要这样写,复杂度太高了