C++ 对c+中的值区间的引用+;

C++ 对c+中的值区间的引用+;,c++,C++,我不熟悉这种语言 我试图写“如果值[I]大于向量x的区间[I-e]到[I-1]上的值之一”,其中I和e是int,值[I]x[I]分别是向量“值”和“x”的元素 我遇到特别麻烦的部分是对向量x的区间上的值的引用。我现在写的代码(这是错误的)如下: if (value[i] > (reference[i - 1]; reference[i - e])) 我不熟悉这种语言 不,我的意思是价值[I]>reference[I-e]“到”reference[I-1]。我更习惯R,在那里可以写“从”到

我不熟悉这种语言

我试图写“如果值[I]大于向量x的区间[I-e]到[I-1]上的值之一”,其中I和e是int,值[I]x[I]分别是向量“值”和“x”的元素

我遇到特别麻烦的部分是对向量x的区间上的值的引用。我现在写的代码(这是错误的)如下:

if (value[i] > (reference[i - 1]; reference[i - e]))
我不熟悉这种语言


不,我的意思是价值[I]>reference[I-e]“到”reference[I-1]。我更习惯R,在那里可以写“从”到“”,但是在C++上我开始认为它是不可能的,或者它不是那么容易。 C++没有这种内置工具“*”。您需要迭代区间“reference[i-e]to reference[i-1]”,然后检查您的值(
value[i]
)是否大于区间中的每个元素

考虑编写代码,然后(如果没有成功),用您尝试过的内容编辑问题,或者发布不同的问题

“*-嗯,有std::find_if,但它不是内置的。

尽管没有“内置”语言构造来完成您所需的任务,但查看标准库,特别是提供的算法是很有用的。我认为解决您问题的一个方法是像这样使用
std::all_of
(其中
T
是存储在向量中的类型)

if(std::all_of(reference.cbegin()+i,reference.cbegin()+e+1,[&value,&i](T ref){return ref
或者在一个具体的例子中:

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

int main()
{
    std::vector<int> reference = {3,4,5,6,7};
    std::vector<int> value = {6,7,8,9};

    int i = 1;
    int e = 3;
    if(std::all_of(reference.cbegin() + i - 1, reference.cbegin() + e + 1, [&value, &i](int ref){ return ref < value[i]; }))
    {
        std::cout << "value[" << i << "] greater than all reference[" << i-1 << "] to reference [" << e << "]" << std::endl;
    }
}
#包括
#包括
#包括


但是您必须非常小心,不要在索引为
i
j
的数组之外运行。请注意,例如,
std::all_of
的第二个参数中的
+1
是因为它需要在最后一个必须查找的值后面使用迭代器。

C++没有任何内置的间隔概念,但是这里实际上不需要

检查给定值内的值是否大于任何值,等同于检查值是否大于所述间隔的最大值,并且可以用C++容易地用算法表示:

if (value[i] > std::max_element(&reference[i - 1], &reference[i - e])) {
}
请注意,范围是半开的:即包括位置
i-1
,排除位置
i-e


还请注意,范围必须以上下限格式描述,因此此处
e
最好小于或等于1。

这是为我编写代码类型的问题。我怀疑有人会帮你做功课。如果你想知道
value[I]
是否大于此范围内的任何值,你必须在该范围内循环,因为搜索某些东西总是涉及循环,就像在现实生活中一样。欢迎使用堆栈溢出。请花点时间阅读并参考你在这里可以问什么和怎么问的材料。不,我的意思是价值[I]>reference[I-e]“to”reference[I-1]。我更习惯于R,在那里可以写“从”到“”,但是在C++上,我开始认为它是不可能的,或者它不是那么容易。不,你需要把它编码成循环。C++没有这样的结构。
if (value[i] > std::max_element(&reference[i - 1], &reference[i - e])) {
}