2016-04-26 57 views
1

我期待下面的代碼應該只打印出「2找到」,但它打印出兩者。第二個不應該發生,因爲4不在矢量的前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.end()) cout << "2 found" << endl; 
    if(find(a.begin(),a.begin()+3,4) != a.end()) cout << "4 found" << endl; 
} 

結果:

2 found 
4 found 
+4

'如果值沒有找到,在這種情況下是*不*'a.end find'返回你通過它的終值()'。代碼應該說'...!= a.begin()+ 3 ...'。 –

+0

@ n.m。我認爲區間的右側是開放的,所以它停在第三個元素上。 – daydayup

+2

@TonyD好的電話。它不能返回'a.end()',因爲它不知道它是什麼。 – NathanOliver

回答

3

find返回end/「最後」 你通過它,如果值沒有找到,在這種情況下是不a.end()值。代碼應該比較一個la ... != a.begin() + 3...

+0

謝謝先生,它的工作原理! – daydayup

+0

@daydayup:當然,不用擔心。 –

1

變化find(a.begin(),a.begin()+3,2) != a.end()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; 

}