std::vector<int> v1(4,5);
auto i = std::find(v1.begin(), v1.end(), 3); // i is vector::iterator
const std::vector<int> v2(4,5);
auto j = std::find(v2.begin(), v2.end(), 3); // j is vector::const_iterator
std::vector<int> v3(4,5);
auto k = std::find(v3.cbegin(), v3.cend(), 3); // k is vector::const_iterator (since C++11)
// Issue in C++98:
std::vector<int> v(3,5);
std::vector<int>::const_iterator ci = std::find( v.begin(), v.end(), 3); // implicit casting
v.insert(ci, 2); // syntax error in C++98, not in C++11 (since g++ 4.9.2)
// C++11: use global begin() and end() for greater generality
std::vector<int> v1(4,5);
auto i = std::find(begin(v1), end(v1), 3); // i is vector::iterator
const std::vector<int> v2(4,5);
auto j = std::find(begin(v2), end(v2), 3); // j is vector::const_iterator
std::vector<int> v3(4,5);
auto k = std::find(cbegin(v3), cend(v3), 3); // not in C++11, only since C++14
int t[4] = { 1, 2, 3, 4 };
auto l = std::find(std::begin(t), std::end(t), 3); // l is int*