【发布时间】:2020-05-13 00:35:49
【问题描述】:
我刚刚解决了一个 codeforces 问题,我在作者的教程解决方案中发现了一些关于 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;
}
【问题讨论】:
-
你知道
find返回什么吗? -
这是一个常规比较。也许您将其误认为是对
find的调用的一部分? -
请通过good book 学习 C++,而不是通过查看随机代码,尤其是来自竞争性编程网站的随机代码。你不会正确地学习语言。
-
互联网 90% 都是垃圾,通常很难从垃圾中挑选出值得学习的东西。您正在查看的内容是好东西的一个迹象是它使用了描述性标识符。使用的名称描述了所命名的内容或代表的内容。这使代码更易于阅读,并具有额外的好处,即更难意外地将
b交换为d,并且如果发生这种情况更容易被发现。