#include <iostream>
#include <vector>
int main( ) {
std:: vector < std:: string > words= { "This" ,"is" ,"just" ,"a" ,"trial!" } ;
size_t i; //using the contiguous property of a vector:
for ( auto const & elem : words) {
i = & elem - & * words.begin ( ) ; // or
i = & elem - & words.front ( ) ; // or
i = & elem - words.data ( ) ; // or
i = std:: addressof ( elem) - std:: addressof ( words[ 0 ] ) ;
if ( std:: addressof ( elem) == & words.front ( ) )
std:: cout << elem << " (at" << & elem<< ") relative to (" << & words[ 0 ] << ") takes position @#" << i<< std:: endl ;
else std:: cout << elem << " (at" << & elem<< ") takes position @#" << i<< std:: endl ;
}
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKaW50IG1haW4oKSB7CiAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gd29yZHM9eyJUaGlzIiwiaXMiLCJqdXN0IiwiYSIsInRyaWFsISJ9OwogICAgc2l6ZV90IGk7IC8vdXNpbmcgdGhlIGNvbnRpZ3VvdXMgcHJvcGVydHkgb2YgYSB2ZWN0b3I6CiAgICBmb3IgKGF1dG8gY29uc3QmIGVsZW0gOiB3b3JkcykgewogICAgCWkgPSAmZWxlbSAtICYqd29yZHMuYmVnaW4oKTsvLyBvcgogICAgCWkgPSAmZWxlbSAtICZ3b3Jkcy5mcm9udCgpOy8vIG9yIAogICAgCWkgPSAmZWxlbSAtIHdvcmRzLmRhdGEoKTsvLyBvcgogICAgCWkgPSBzdGQ6OmFkZHJlc3NvZihlbGVtKSAtIHN0ZDo6YWRkcmVzc29mKHdvcmRzWzBdKTsgCiAgICAJaWYoc3RkOjphZGRyZXNzb2YoZWxlbSkgPT0gJndvcmRzLmZyb250KCkpCiAgICAJICBzdGQ6OmNvdXQgPDwgZWxlbSA8PCIgKGF0Ijw8JmVsZW08PCIpIHJlbGF0aXZlIHRvICgiPDwgJndvcmRzWzBdIDw8ICIpIHRha2VzIHBvc2l0aW9uIEAjIjw8aTw8IHN0ZDo6ZW5kbDsKICAgIAllbHNlIHN0ZDo6Y291dCA8PCBlbGVtIDw8IiAoYXQiPDwmZWxlbTw8ICIpIHRha2VzIHBvc2l0aW9uIEAjIjw8aTw8IHN0ZDo6ZW5kbDsKICAgIH0KCXJldHVybiAwOwp9