2016-04-26 7 views
1

次のコードでは "2が見つかりました"だけを出力するはずですが、両方を出力します。 2つ目は、ベクトルの最初の3つの要素に4がないために発生しません。私はどこで間違いを犯したのですか?ベクトルの一部から値を正しく見つけるにはどうしたらいいですか?

#include <iostream> 
#include <vector> 
#include <algorithm> 
using namespace std; 

int main() 
{ 
    vector<int> a = {1,2,3,4,5}; 
    if(find(a.begin(),a.begin()+3,2) != a.end()) cout << "2 found" << endl; 
    if(find(a.begin(),a.begin()+3,4) != a.end()) cout << "4 found" << endl; 
} 

結果:

2 found 
4 found 
+4

に変更find(a.begin(),a.begin()+3,2) != a.end() '。コードは '...!= a.begin()+ 3 ...'と言うべきです。 –

+0

@ n.m。私は、区間の右側が開いていると思って、3番目の要素で停止します。 – daydayup

+2

@TonyDよろしくお願いします。それが何であるか分かりませんので 'a.end()'を返すことはできませんでした。 – NathanOliver

答えて

3

findは、値が、この場合にa.end()されていない、見つからない場合は、それを通過したエンド/ "最後" の値を返します。コードはla ... != a.begin() + 3...と比較する必要があります。

+0

ありがとうございました! – daydayup

+0

@daydayup:確かに、心配はありません。 –

1

値は、この場合には、 `a.end()` * *されていない、見つからない場合は、あなたがそれを渡された最終値を返しますfind` find(a.begin(),a.begin()+3,2) != a.begin()+3

#include <iostream> 
#include <vector> 
#include <algorithm> 
using namespace std; 

int main() 
{ 
    vector<int> a = {1,2,3,4,5}; 
    if(find(a.begin(),a.begin()+3,2) != a.begin()+3) cout << "2 found" << endl; 
    if(find(a.begin(),a.begin()+3,4) != a.begin()+3) cout << "4 found" << endl; 

} 
関連する問題