理解C++中的find和vectors

3

我正在尝试理解这行代码

vector<int>::iterator it = find(list_vector.begin(), list_vector.end(), 5)

这里我先前声明了vector<int> list_vector;.

那么这个5是什么意思?它返回什么?如果它能在开头和结尾找到5,它会返回5吗?如果我想要编写一个if语句,想要查找语句中是否有数字10(如果有,返回true),我该如何做呢?


8
http://en.cppreference.com/w/cpp/algorithm/find - us2012
1
我认为,“RTFM”虽然听起来很严厉,但这是唯一合适的回答... - Matteo Italia
“查找数字10是否在[if]语句中?” 嗯? - aschepler
我为“RTFM”道歉。我尝试查找答案,但没有找到任何信息。我似乎无法执行if(vector<int> :: iterator it = find(plist.begin(),plist.end(),number)== number),因为它会出现错误。有什么想法吗? - Jake Smith
迭代器模仿指针;您必须对其进行解引用才能获取数字。当然,如果迭代器不是plist.end()(相当于NULL的迭代器),那么就是这样。 - chrisaycock
显示剩余2条评论
1个回答

10
vector<int>::iterator it = find(list_vector.begin(), list_vector.end(), 5)

std::find搜索其前两个参数指定范围内的元素。它返回一个迭代器,指向第一个匹配的元素。如果没有匹配的元素,则返回第二个参数。

list_vector.begin()返回一个迭代器,指向list_vector的第一个元素。

list_vector.end()返回一个迭代器,指向list_vector最后一个元素之后的位置。

5是搜索的目标。 find()将查找具有值为5的元素。

如果您想确定向量中是否存在10,请执行以下操作:

if(std::find(list_vector.begin(), list_vector.end(), 10) == list_vector.end())
    std::cout << "No 10, bummer\n";
else
    std::cout << "I found a 10!\n";

或者,如果您想同时确定数字10是否存在 并且 确定它的位置:

std::vector<int>::iterator it = std::find(list_vector.begin(), list_vector.end(), 10);
if(it == list_vector.end())
    std::cout << "No 10\n";
else
    std::cout << "Look what I found: " << *it << "\n";

对于第一个问题,它将从开头到结尾搜索10,当您使用==运算符时,为什么不能将其设置为10、5或只是某个int变量,让用户输入?但是当我尝试这样做时,它会给我一些错误。例如:find(list_vector.begin(),list_vector.end(),10)== number) - Jake Smith
@JakeSmith,std::find 返回的是一个迭代器,而不是第三个参数的任何类型。 - chris
如何使用find函数找到下一个出现的位置? - Muhammad Umer
1
@MuhammadUmer - iterator it = std::find(v.begin(), v.end(), 10); std::cout << "第一次查找: " << *it << "\n"; it = std::find(it, v.end(), 10); std::cout << "第二次查找: " << *it << "\n"; - Robᵩ
哈哈,那很简单,谢谢。 - Muhammad Umer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接