c++ - Odd values printed when dereferencing the end iterator of a vector -


i have vector storing {1,2,3,4,5}. tried print *(vec.end()) , got result 6. don't know how explain this. similarly, calling vec.find(500) gave result 6. why getting number?

#include<iostream> #include<iterator> #include<set> #include<map> int main() {     int a[] = {1,2,3,4,5};     std::set<int> set1(a,a+sizeof(a)/sizeof(int));     (std::set<int>::iterator itr=set1.begin();itr!=set1.end();++itr){         std::cout << *itr << std::endl;     }     //std::pair<std::set<int>::iterator, bool> ret;     //ret = set1.insert(1);     //std::cout << *(ret.first) << "first;second" << ret.second << std::endl;     std::set<int>::iterator itr1 = set1.begin();     set1.insert(itr1,100);     std::advance(itr1,3);     std::cout << *itr1 << std::endl;     std::cout << *(set1.find(500)) << std::endl;     std::cout << *(set1.end()) << std::endl; } 

vec.end() not point last element, "behind" last one.

you not accessing last element in vector. instead dereferencing "invalid" iterator, undefined behaviour , turns out invalid index in vector in case.

vec.find returns end iterator if searched element can not found.


Comments