C++ find()

#include<iostream.h>#include<vector>#include<algorithm>usingnamespacestd;voidmain(){i... #include<iostream.h>
#include<vector>
#include<algorithm>
using namespace std;
void main()
{
int search1=98;
int ia[6]={27,210,12,47,109,83};

vector<int>::iterator it1;
it1=find(&ia[0],&ia[6],search1);
cout<<*it1<<endl;

int search2=88;
int* t1;
t1=find(&ia[0],&ia[6],search2);
cout<<*t1<<endl;
}
为什么输出的都是98?
能不能再介绍一下find用法,主要是如果找不到返回什么?为什么地址要多一位啊“&ia[6]”
谢谢大家~~~
#include<iostream.h>
#include<vector>
#include<algorithm>
using namespace std;
void main()
{
int search1=111;
int ia[6]={27,210,12,47,109,83};

vector<int>::iterator it1;
it1=find(&ia[0],&ia[6],search1);
cout<<*it1<<endl;

int search2=222;
vector<int>::iterator it2;
it2=find(&ia[0],&ia[6],search2);
cout<<*it2<<endl;
}
为什么还是不对啊~~~
我觉得应该输出111和222,因为都没找到啊,但为什么输出的是111和111啊?
一句话,find如果没有找到,返回什么,是不是search的原来的值啊,还是其他的什么?
展开
 我来答
百度网友5d2d01fa0
2007-08-03 · TA获得超过2158个赞
知道小有建树答主
回答量:943
采纳率:0%
帮助的人:1400万
展开全部
find返回的是对应区间中元素的迭代器,但是这个容器和容器的迭代器类型要是匹配的,你用一个vector<int>的迭代器去接受一个int指针显然错误,原始数组对应的迭代器就是原始的指针,就像你后一个搜索用的那样:
#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int search1=210;
int ia[6]={27,210,12,47,109,83};
int* t1;

t1=find(&ia[0],&ia[6],search1);
cout<<*t1<<endl;

int search2=47;

t1=find(&ia[0],&ia[6],search2);
cout<<*t1<<endl;
}

-------------
刚才已经强调过了,既然你用的是原始数组,就不应该用vector的迭代器.我不知道你用的什么编译器,我用的GCC,你那样写就是编译错误,改为int*的指针就可以了.
另外find找不到返回的是你指定的尾部迭代器,比如t1=find(&ia[0],&ia[6],search2); 就会返回ia[6],如果是stl容器的话,返回一个这样的迭代器不会有问题,但是你用的是数组,返回的就是一个未知的元素:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int search1=111;
int ia[6]={27,210,12,47,109,83};

//vector<int>::iterator it1;
int *it1,*it2;
it1=find( &ia[0],&ia[6],search1 );
cout<<*it1<<endl;

int search2=222;
//vector<int>::iterator it2;
it2=find( &ia[0],&ia[6],search2 );
cout<<*it2<<endl;

cout<<it1[-1]<<" "<<it2[-1]<<endl;
}
TableDI
2024-07-18 广告
VLOOKUP是Excel中用于垂直查找的函数,其基本用法包括四个参数:1. 查找值:即在数据表首列中需要搜索的值。2. 数据表:包含查找值的单元格区域或数组。3. 返回值所在列数:指定返回查询区域中第几列的值。4. 查找方式:选择精确匹配... 点击进入详情页
本回答由TableDI提供
xiangjuan314
2016-02-15 · TA获得超过3.3万个赞
知道大有可为答主
回答量:2.9万
采纳率:0%
帮助的人:2769万
展开全部
STL的find,find_if函数提供了一种对数组、STL容器进行查找的方法。
使用该函数,需 #include <algorithm>
查找一个list中的数据,通常用find(),例如:
using namespace std;
int main()
{
list<int> lst;
lst.push_back(10);
lst.push_back(20);
lst.push_back(30);
list<int>::iterator it = find(lst.begin(), lst.end(), 10); // 查找list中是否有元素“10”
if (it != lst.end()) // 找到了
{
// do something
}
else // 没找到
{
// do something
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-12-18
展开全部
楼上讲的很好,有一点不太对,int ia[6]={27,210,12,47,109,83};只有六个元素,所以find( &ia[0],&ia[6],search1 );
ia[5]就是数组最大值,按照迭代器找不到返回最后一个值(xxx.end()),上面最后一个值即ia[6].
是数组越界的情况,这也就是为什么楼主每次找不到都输出同样值的情况(该值就ia[6])。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式