这个find返回的是什么类型,为什么用if (result1 != std::end(v)) 来判断有没有?不能返回具体下标吗?

#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>

int main()
{
    int n1 = 3;
    int n2 = 5;

    std::vector<int> v{0, 1, 2, 3, 4};

    auto result1 = std::find(std::begin(v), std::end(v), n1);
    auto result2 = std::find(std::begin(v), std::end(v), n2);

    if (result1 != std::end(v)) {
        std::cout << "v contains: " << n1 << '\n';
    } else {
        std::cout << "v does not contain: " << n1 << '\n';
    }

    if (result2 != std::end(v)) {
        std::cout << "v contains: " << n2 << '\n';
    } else {
        std::cout << "v does not contain: " << n2 << '\n';
    }
}

就是这样定义的,使用 end 迭代器表示未找到,否则就是找

至于返回匹配元素的下标,自己实现吧,

首先你这个 vector 是否是有序的?

乱序直接循环解决

排过序使用二分解决

你可以试试用地址来判断下标