I'm trying to compare the element pointed by an iterator to an integer, but so far i haven't had any luck in doing so. please correct whatever i'm doing wrong. Thank you.

``````vector<int>::iterator y;

for (int i = 0;i<n2;i++)
{
cin>>temp;
cnt = 0;
y = lower_bound(a.begin(),a.end(),temp);
if (*y == temp) cout <<temp<<"found at"<<int(y-a.begin()+1)<<endl;
}
``````

error msg = "vector iterator not dereferencable"

Instead of `if (*y == temp)` to test if the element was found, you need to use this test:

``````if( y != a.end() )
``````

Because if the element is not found, "y" will be equal to the end iterator, which means that it will be …

## All 4 Replies

This code compiles with vc++ 2012 RC, but its not tested.

``````void foo(int n2, vector<int> a)
{
int temp, cnt;
vector<int>::iterator y;
for (int i = 0;i<n2;i++)
{
cin>>temp;
cnt = 0;
y = lower_bound(a.begin(),a.end(),temp);
if (*y == temp) cout <<temp<<"found at"<<int(y-a.begin()+1)<<endl;
}
}
``````

Instead of `if (*y == temp)` to test if the element was found, you need to use this test:

``````if( y != a.end() )
``````

Because if the element is not found, "y" will be equal to the end iterator, which means that it will be "not dereferencable".

@mike200017 Actually if the element is not found there is no guarantee that "y" will point to the end iterator. Given an array of 2,3,5,7,9 lower_bound(..,6) will point to 7. Your code works(I no longer get the error) but it doesn't return the correct value :(

Nvm I fixed it

``````for (int i = 0;i<n2;i++)
{
cin>>temp;
y = lower_bound(a.begin(),a.end(),temp);