Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
if条件下,C++(+)STL中的=(a)()的用法是什么? 我刚刚解决了一个代码问题,我在作者的教程解决方案中找到了关于C++的STL的新东西……但是我不能理解。这里,在finda.begin,a.end,s-i==a.end中,==a.end做什么_C++_Stl_Find - Fatal编程技术网

if条件下,C++(+)STL中的=(a)()的用法是什么? 我刚刚解决了一个代码问题,我在作者的教程解决方案中找到了关于C++的STL的新东西……但是我不能理解。这里,在finda.begin,a.end,s-i==a.end中,==a.end做什么

if条件下,C++(+)STL中的=(a)()的用法是什么? 我刚刚解决了一个代码问题,我在作者的教程解决方案中找到了关于C++的STL的新东西……但是我不能理解。这里,在finda.begin,a.end,s-i==a.end中,==a.end做什么,c++,stl,find,C++,Stl,Find,问题的链接: find和其他类似函数将迭代器返回给find元素。如果在容器中找不到元素,则返回的迭代器将指向指定范围的末尾,在您的示例中,该范围是std::end。因此,finda.begin,a.end,s-i==a.end意味着元素s-i不在容器a中 根据文件: 返回:比较范围内第一个元素的迭代器 等于val。如果没有匹配的元素,则函数返回最后一个 finda.begin,a.end,s-i尝试在a中查找s-i,失败时返回a.end finda.begin,a.end,s-i==a.end是

问题的链接:

find和其他类似函数将迭代器返回给find元素。如果在容器中找不到元素,则返回的迭代器将指向指定范围的末尾,在您的示例中,该范围是std::end。因此,finda.begin,a.end,s-i==a.end意味着元素s-i不在容器a中


根据文件:

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

finda.begin,a.end,s-i尝试在a中查找s-i,失败时返回a.end


finda.begin,a.end,s-i==a.end是一个布尔表达式,当在a中找不到s-i时,该表达式的计算结果为true,否则为false。

您知道find返回什么吗?这是一个常规比较。也许你把它误读为寻找的一部分?a是一种向量类型。如果签出,find可以使用两个迭代器作为一个范围来查找该范围中的指定值。在本例中,std::vector::end返回向量a中的最终迭代器。您可以看到文档的结尾。请从A中学习C++,而不是通过随机代码,特别是不从竞争性编程站点中获取随机代码。你无法正确地学习这门语言。互联网90%是积垢,通常很难从中找到值得学习的东西。你看到的是好东西的一个标志是它使用了描述性标识符。所使用的名称描述了被命名者的行为或代表。这使得代码更容易阅读,并且附带的好处是更难意外地将b交换为d,并且更容易发现是否发生了这种情况。编码器wrotefinda.begin,a.end,s-i==a.end,以便在向量a中存在s-i时打印i。假设find返回了一个迭代器而不是a.end,即如果在a中找到了s-i,那么在这种情况下finda.begin,a.end,s-i=`a.end``必须为false,因为返回的迭代器不是==a.end….&因此在这种情况下,if语句为false,我不能打印,这与使用条件语句的目的背道而驰。我必须被打印出来,以防找到“`s-i``”。如果这是一个愚蠢的疑问,很抱歉……但我仍然找不到finda.begin,a.end,s-i==a.end不是finda.begin,a.end,s-i!=a、 我认为这是合适的逻辑finda.begin,a.end,s-i!=a、 如果在向量中找到s-i,end将始终为真。我的想法是:finda.begin,a.end,如果找到s-i,s-i将向s-i返回一个迭代器。在本例中,cleary find没有返回a.endl。那么finda.开始,a.结束,s-i!=a、 结束是正确的,因此允许我打印i。先生/女士,请帮助我完成我的doubt@noobCoder003我想你误读了什么。各州决定−x或s+x是。。。不在关闭列表中,因此检查==end。
//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;
}