Я ожидал, что следующий код должен распечатываться только «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
'find' возвращает конечное значение вы передаёте его, если значение не найдено, что в данном случае * не *' a.end() '. Код должен указывать '...! = A.begin() + 3 ...'. –
@ н.м. Я думал, что правая часть интервала открыта, поэтому она останавливается у третьих элементов. – daydayup
@TonyD Хороший звонок. Он не мог возвратить 'a.end()', поскольку он понятия не имеет, что это такое. – NathanOliver