#include <vector>
#include <algorithm>
#include <iterator>
int main()
{
// Begin and end iterators in STL:
{
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*
}
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGl0ZXJhdG9yPgoKaW50IG1haW4oKQp7CiAgLy8gQmVnaW4gYW5kIGVuZCBpdGVyYXRvcnMgaW4gU1RMOgogIHsKICAgIHN0ZDo6dmVjdG9yPGludD4gdjEoNCw1KTsKICAgIGF1dG8gaSAgPSBzdGQ6OmZpbmQodjEuYmVnaW4oKSwgdjEuZW5kKCksIDMpOyAgLy8gaSBpcyB2ZWN0b3I6Oml0ZXJhdG9yCgogICAgY29uc3Qgc3RkOjp2ZWN0b3I8aW50PiB2Mig0LDUpOwogICAgYXV0byBqID0gc3RkOjpmaW5kKHYyLmJlZ2luKCksIHYyLmVuZCgpLCAzKTsgICAvLyBqIGlzIHZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IKCiAgICBzdGQ6OnZlY3RvcjxpbnQ+IHYzKDQsNSk7CiAgICBhdXRvIGsgPSBzdGQ6OmZpbmQodjMuY2JlZ2luKCksIHYzLmNlbmQoKSwgMyk7IC8vIGsgaXMgdmVjdG9yOjpjb25zdF9pdGVyYXRvciAoc2luY2UgQysrMTEpCiAgfQoKICAvLyBJc3N1ZSBpbiBDKys5ODoKICB7CiAgICBzdGQ6OnZlY3RvcjxpbnQ+IHYoMyw1KTsKICAgIHN0ZDo6dmVjdG9yPGludD46OmNvbnN0X2l0ZXJhdG9yIGNpID0gc3RkOjpmaW5kKCB2LmJlZ2luKCksIHYuZW5kKCksIDMpOyAgLy8gaW1wbGljaXQgY2FzdGluZwogICAgdi5pbnNlcnQoY2ksIDIpOyAgLy8gc3ludGF4IGVycm9yIGluIEMrKzk4LCBub3QgaW4gQysrMTEgKHNpbmNlIGcrKyA0LjkuMikKICB9CgogIC8vIEMrKzExOiB1c2UgZ2xvYmFsIGJlZ2luKCkgYW5kIGVuZCgpIGZvciBncmVhdGVyIGdlbmVyYWxpdHkKICB7CiAgICBzdGQ6OnZlY3RvcjxpbnQ+IHYxKDQsNSk7CglhdXRvIGkgPSBzdGQ6OmZpbmQoYmVnaW4odjEpLCBlbmQodjEpLCAzKTsgICAgICAgICAvLyBpIGlzIHZlY3Rvcjo6aXRlcmF0b3IKCQoJY29uc3Qgc3RkOjp2ZWN0b3I8aW50PiB2Mig0LDUpOwoJYXV0byBqID0gc3RkOjpmaW5kKGJlZ2luKHYyKSwgZW5kKHYyKSwgMyk7ICAgICAgICAgLy8gaiBpcyB2ZWN0b3I6OmNvbnN0X2l0ZXJhdG9yCgkKCXN0ZDo6dmVjdG9yPGludD4gdjMoNCw1KTsKCWF1dG8gayA9IHN0ZDo6ZmluZChjYmVnaW4odjMpLCBjZW5kKHYzKSwgMyk7ICAgICAgIC8vIG5vdCBpbiBDKysxMSwgb25seSBzaW5jZSBDKysxNAoJCglpbnQgdFs0XSA9IHsgMSwgMiwgMywgNCB9OwoJYXV0byBsID0gc3RkOjpmaW5kKHN0ZDo6YmVnaW4odCksIHN0ZDo6ZW5kKHQpLCAzKTsgLy8gbCBpcyBpbnQqCiAgfQp9