2016-11-14 4 views
-1

私は最近C++ STLの使用を開始しましたが、今日は自分のコードでlower_bound関数を試しました。しかし残念ながら、私はエラーを得た:lower_bound(C++ STLより)の結果を整数型変数に代入できますか?

:君たちはイテレータ型の変数が、このコード、整数型変数に追加することができないと言うならここ

cannot convert '__gnu_cxx::__normal_iterator<long long int*, std::vector<long long int> >' to 'long long int' in assignment| 

は私のコード

lli n; 
cin >> n; 
lli k; 
cin >> k; 

vector<lli> v; 
lli store; 
for(lli i = 0;i < n;i++) 
{ 
    cin >> store; 
    if(store < k) 
     v.push_back(store); 
} 

sort(v.begin(),v.end()); 

lli paths = 0; 
for(lli i = (lli)v.size()-1;i >= 0;i--) 
    paths = paths + lower_bound(v.begin(),v.begin()+i-1,v[i]-k); 

cout << paths; 

です

https://github.com/sampritipanda/IOI_Repository/blob/master/ZCO/2013/CHEWING.cppは、ラインを介して、整数型の変数に割り当てられるLOWER_BOUNDの結果を使用する:

int j = lower_bound(gum.begin() + i, gum.end(), K - gum[i]) - (gum.begin() + i); 

私が間違っているところでアドバイスをしてください。

注:lliは、すでにマクロを使用して定義されているlong long intの略です。

説明が必要な場合は、質問してください。

+0

ありません、それは積分変数にイテレータを割り当てられません:

lower_bound(gum.begin() + i, gum.end(), K - gum[i]) - (gum.begin() + i); 

は、あなたの場合に行うことができますstd::vector<int>::difference_type

最高です戻ります。注意深く読んで、かっこに合ってください。 – StoryTeller

+0

コードはコンパイルされません。通常のインクルードとmain()関数だけでなく、いくつかのtypedefが欠けているようです。 –

答えて

1

いいえ、整数変数にイテレータを割り当てることはできません。

paths = paths + (lower_bound(v.begin(),v.begin()+i-1,v[i]-k) - v.begin()); 
関連する問題