在C++中寻找向量函数

在C++中寻找向量函数,c++,vector,C++,Vector,好吧,我是新手,我很难理解这一点 我做了这个密码 #include <iostream> #include <vector> #include <algorithm> using namespace std; int main (void) { vector <int> a; int i; a.push_back(1); a.push_back(2); a.push_back(3); a.push_b

好吧,我是新手,我很难理解这一点

我做了这个密码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main (void)
{
    vector <int> a;
    int i;
    a.push_back(1);
    a.push_back(2);
    a.push_back(3);
    a.push_back(4);
    a.push_back(5);

    vector <int>::iterator position = find(a.begin(),a.end(),6);
    cout<<*position<<"\n";
    return 0;
}

我到处都读到find函数,如果它没有找到任何东西,就会将迭代器返回到向量的末尾。所以,当我这样做,搜索向量中不存在的值6时,它应该返回迭代器到向量的末尾,实际上是5。打印实际值时,它应打印5,但打印0。为什么如果find在向量中找不到与该值相关的任何内容,那么它会将迭代器返回到最后一个值,然后打印0?

否,它不会返回向量的结尾,而是返回vector.end

前者表示向量的最后一个元素,即5

后者vector.end是

这增加了一些混淆,因为确实指向向量的第一个元素,但这是必要的,因为您可以迭代这些容器。

否,它不会返回向量的结尾,它将返回vector.end

前者表示向量的最后一个元素,即5

后者vector.end是

这增加了一点混乱,因为确实指向向量的第一个元素,但这是必要的,因为您可以迭代这些容器

为什么如果find没有在向量中找到与该值相关的任何内容,那么它会将迭代器返回到最后一个值,然后打印0

0是在取消引用向量的结束迭代器时获得的垃圾值。这是未定义的行为,因此您可能会得到任何数字。正确的代码如下所示:

vector <int>::iterator position = find(a.begin(),a.end(),6);
if (position != a.end()) {
    cout<<*position<<"\n";
} else {
    cout << "not found" << endl;
}
得到结果后,需要将其与a.end进行比较,以查看结果是否有效。如果结果无效,则不能取消对迭代器的引用以避免未定义的行为

为什么如果find没有在向量中找到与该值相关的任何内容,那么它会将迭代器返回到最后一个值,然后打印0

0是在取消引用向量的结束迭代器时获得的垃圾值。这是未定义的行为,因此您可能会得到任何数字。正确的代码如下所示:

vector <int>::iterator position = find(a.begin(),a.end(),6);
if (position != a.end()) {
    cout<<*position<<"\n";
} else {
    cout << "not found" << endl;
}

得到结果后,需要将其与a.end进行比较,以查看结果是否有效。如果结果无效,则不能取消对迭代器的引用以避免未定义的行为。

如中所示,结束迭代器与向量中的最后一个元素不同。相反,它已经超过了最后一个元素。访问该元素会导致未定义的行为。

如中所示,结束迭代器与向量中的最后一个元素不同。相反,它已经超过了最后一个元素。访问该元素会导致未定义的行为。

它返回您传入的作为结束的内容,即.end。取消引用a.end是未定义的行为。t应该将迭代器返回到向量的末尾,实际上是5-不,不是,您需要阅读std::vector::end的文档。另外,您认为将迭代器返回到最后一个元素有意义吗?那么,如何才能区分“未找到”和“在最后位置找到”呢?对不起,我无法区分。我的错。正如我所说,我对这一点还不熟悉。我无法正确理解。它返回您传入的内容作为结束,即a.end。取消引用a.end是未定义的行为。t应该将迭代器返回到向量的末尾,实际上是5-不,不是,您需要阅读std::vector::end的文档。另外,您认为将迭代器返回到最后一个元素有意义吗?那么,如何才能区分“未找到”和“在最后位置找到”呢?对不起,我无法区分。我的错。正如我所说,我对这一点还不熟悉。我无法正确理解。哦!我现在明白了。谢谢你的帮助@用户3776323如果答案是你需要的,一定要接受。哦!我现在明白了。谢谢你的帮助@用户3776323如果答案是您需要的,请务必接受。