如果有条件,在find()c ++ stl中使用== a.end()有什么用?

问题描述 投票:-9回答:2

我刚刚解决了代码强制问题,并且在作者的教程解决方案中发现了有关find()c ++ stl的新东西……但是我听不懂。在find(a.begin(), a.end(), s-i) == a.end()中,==a.end()的作用是什么?

(链接到问题:http://codeforces.com/contest/1293/problem/A

//Author's tutorial solution
#pragma GCC optimize("Ofast")

#include <bits/stdc++.h>
using namespace std;

#define endl '\n'

int n, s, k;
vector<int> a;

void Input() {
    cin >> n >> s >> k; a.clear(); a.resize(k);
    for (auto &z: a) cin >> z;
}

void Solve() {
    for (int i=0; i<=k; i++) {
        if (s-i >= 1 && find(a.begin(), a.end(), s-i) == a.end()) {cout << i << endl; return;} //SEE HERE
        if (s+i <= n && find(a.begin(), a.end(), s+i) == a.end()) {cout << i << endl; return;} //SEE HERE
    }
    assert(false); 

int main(int argc, char* argv[]) {
    ios_base::sync_with_stdio(0); cin.tie(NULL);
    int T; cin >> T; while (T--) {Input(); Solve();} return 0;
}
c++ stl find
2个回答
4
投票

std::find和其他类似函数将Iterator返回到找到的元素。如果在容器中找不到该元素,则返回的Iterator指向指定范围的末尾(在您的情况下为std::end)。因此,find(a.begin(), a.end(), s-i) == a.end()表示元素s-i不在容器a中。

cpp reference


4
投票

根据文档(http://www.cplusplus.com/reference/algorithm/find/):

返回:迭代到比较范围内第一个元素的元素等于值如果没有元素匹配,则该函数返回最后一个。

[find(a.begin(), a.end(), s-i)尝试在s-i中找到a,并在失败时返回a.end()

[find(a.begin(), a.end(), s-i) == a.end()是一个布尔表达式,当在true中找不到s-i时,其结果为a,否则为false

© www.soinside.com 2019 - 2024. All rights reserved.