2016-04-26 2 views
1

Я ожидал, что следующий код должен распечатываться только «2 найден», однако он печатает оба. Второе не должно происходить, потому что 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.end() '. Код должен указывать '...! = A.begin() + 3 ...'. –

+0

@ н.м. Я думал, что правая часть интервала открыта, поэтому она останавливается у третьих элементов. – daydayup

+2

@TonyD Хороший звонок. Он не мог возвратить 'a.end()', поскольку он понятия не имеет, что это такое. – NathanOliver

ответ

3

find возвращает конец/"последний" значение, которое передается, если значение не найдено, что в данном случае неa.end(). Код должен сравнить a la ... != a.begin() + 3....

+0

спасибо, сэр, это работает! – daydayup

+0

@деньденьup: уверенный, нет беспокойство. –

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; 

} 
Смежные вопросы