c++ vector find 如何查找啊?语法是怎么写的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ vector find 如何查找啊?语法是怎么写的?相关的知识,希望对你有一定的参考价值。

sruct student


vector<student>stu;
添加数组给
vector<student>stu;

stu.push_back()


现在的问题就是 我想查询添加在vector<student>stu;里面的数组啊,怎么写啊?看了很多关于用find的 不会用啊

如下参考:

1. 首先,打开如图中红色方框所示的软件,构造一个整型向量向量。

2.如图所示,向量的大小为0。

3.如红色方框所示,将vector元素的值修改为6个元素的值为20的向量。

4.计算结果表明,该算法成功地构造出了含有6个元素的向量。

5.如图所示,将现有vector对象的范围用作构造函数参数,并将该对象复制到另一个vector对象。

6.如图所示,程序运行结果确实显示为420。

参考技术A if(find(v.begin(), v.end(), val) != v.end())
//找到
else
//没找到

val为要找的元素

本回答被提问者采纳
参考技术B #include <iostream> // std::cout
#include <algorithm> // std::find
#include <vector> // std::vector
bool IsOdd (int i)
return ((i%2)==1);

int main()

int p[] = 0, 1, 2, 3, 4, 5;
std::vector<int> myvector( p, p + 6 );
std::vector<int>::iterator it;
/** @brief find() example */
// iterator to vector element:
it = find( myvector.begin(), myvector.end(), 3 );
if( it != myvector.end() ) // finded

std::cout << "The element 3 is found." << \'\\n\';
// now *it is 3. it is a iterator to int.
++it;
std::cout << "The element following 3 is " << *it << \'\\n\';

/** @brief find_if() example */
// iterator to vector element matching some condition.
it = std::find_if (myvector.begin(), myvector.end(), IsOdd);
if( it != myvector.end() ) // finded

std::cout << "The first odd value is " << *it << \'\\n\';

return 0;

find(first, last, val) 查找值为val的元素,返回迭代器

http://www.cplusplus.com/reference/algorithm/find/

find_if(first,last, pred) 查找符合某个条件的元素,返回迭代器

http://www.cplusplus.com/reference/algorithm/find_if/

C++ find()

#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的原来的值啊,还是其他的什么?

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;
参考技术A 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;
参考技术B 楼上讲的很好,有一点不太对,int ia[6]=27,210,12,47,109,83;只有六个元素,所以find( &ia[0],&ia[6],search1 );
ia[5]就是数组最大值,按照迭代器找不到返回最后一个值(xxx.end()),上面最后一个值即ia[6].
是数组越界的情况,这也就是为什么楼主每次找不到都输出同样值的情况(该值就ia[6])。

以上是关于c++ vector find 如何查找啊?语法是怎么写的?的主要内容,如果未能解决你的问题,请参考以下文章

C++:使用find查找Vector中的复杂类型元素

c++ stl set 中find方法是如何实现的

C++中,vector参数为类型时,如何查找和添加元素?

C++ - 迭代从 find_if 返回的 std::vector<>

C++ find()

C++如何搜索出该程序目录下所有特定后缀名的文件?