2016-12-28 12 views
-5

この言語を初めて使っています。C++の値の区間への参照

if value [i]がベクトルxからインターバル[i-1]の値の1つより大きい場合、iとeがintで、value [i] x [i]はベクトル "value"と "x"の要素です。

私は特に問題がある部分は、ベクトルxの間隔の値を参照しています。私は今、書かれている(と間違っている)、次のようなコード、

if (value[i] > (reference[i - 1]; reference[i - e])) 
+1

以下にする必要があることに注意して。私は誰かがあなたの宿題をするのを疑う。 – paweldac

+2

'value [i]'がこの範囲のどの値よりも大きいかどうか知りたいのであれば、実生活と同じように常にループを伴うものについては_searching_としてループする必要があります。 – ForceBru

+0

ようこそスタックオーバーフロー。 [The Tour](http://stackoverflow.com/tour)を読み、[ヘルプセンター](http://stackoverflow.com/help/asking)の資料を参考にしてください。ここに聞いてください。 –

答えて

0

は、私がこの言語に新しいです。

いいえ、私はvalue [i]> reference [i - e] "〜" reference [i - 1]を意味しました。私はRに慣れていますが、どこから "〜に"書き込むことができますが、C++では可能ではないと思い始めています。そう簡単ではありません。

C++にはこの種の組み込み機能 '*はありません。 は、参照 "[i - 1]を参照[i - 1]"に反復する必要があります。、次にの値(value[i])がその区間の各要素より大きいかどうかを確認してください。

コードを記述してから、(成功しない場合は)試した内容で質問を編集するか、別の質問を投稿することを検討してください。

'* - よく、std :: find_ifがありますが、組み込みではありません。

0

必要な処理を行うための組み込みの言語構成はありませんが、特に提供されているアルゴリズムで標準ライブラリを調べると便利です。

#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; 
    } 
} 

see it live

しかし:私はあなたの問題を解決する1つの方法は、

if(std::all_of(reference.cbegin() + i, reference.cbegin() + e + 1, [&value, &i](T ref){ return ref < value[i]; }))) 
{ 
    ... 
} 

やコンクリートの例では

Tがベクトルに保存されているタイプである)このような std::all_ofを使用することだと思います配列 ijを使って配列の外に出ないように気をつけなければなりません。たとえば、 std::all_ofの2番目のパラメータの +1は、最後に見つけた値の後ろにの後ろに反復子 が必要であることに注意してください。

0

C++には間隔の組み込みの概念はありませんが、ここで実際には必要ありません。

値が所与の内部の任意の値よりも大きいか否かをチェックする値は、前記間隔の最大値よりも大きいか否かをチェックするに相当し、これはmax_elementアルゴリズムを使用してC++で容易に十分に表すことができる。

if (value[i] > std::max_element(&reference[i - 1], &reference[i - e])) { 
} 

注範囲であることをハーフオープン:つまり、位置i - 1が含まれており、位置i - eが除外されています。

はまた範囲は、より低い上限形式で記述ので、ここでeより良いこれは私のために、質問のタイプのライトコードである1