c++ - Using iterator over set of pointers to call it's pointer object methods -
i beginner comes working iterators , want iterate through names of points printing them out. not know how access them, me out please idea. approach looks this:
set<point::ptr> points = world->getpoints(); // have set of pointers point point::cptr mypoint = *points.begin(); // dereferenced iterator first element point::cptr lastpoint = *points.rbegin(); //dereferenced iterator last valid element for(set<point::ptr>::iterator = *points.begin(); != points.end(); it++) { ros_info("points are: %s: ", mypoint.get()->getname().c_str()); } normally iterator in loop shall set first element of set. since set contains pointers , want able call functions available objects inside pointers, tried way. works 1 element that, giving me desired name:
ros_info("mypoint pointer gives %s: ", mypoint.get()->getname().c_str()); edit: typedef boost::shared_ptr cptr;
it in loop below iterator. hence, access element refers to, need dereference (*it)or use member access operator (it->).
set<point::ptr> points = world->getpoints(); // have set of pointers point for(set<point::ptr>::iterator = points.begin(); != points.end(); it++) { ros_info("points are: %s: ", it->get()->getname().c_str()); ros_info("points are: %s: ", (*it).get()->getname().c_str()); } there typo or deliberate syntax error here:
for(set<point::ptr>::iterator = *points.begin(); != points.end(); it++) { // ^^^ you want iterator iterate on loop, not value refers to.
edit: op's , future reference moved here comment:
i don't have reference point::ptr, appears pointer class. thus, point object object of pointer class stores, need call get(). function returns point* pointer (which called raw pointer) can use use pointers class objects. in short, example of common concept of wrapping raw pointers (more or less) smart pointer classes.
see:
for(set<point::ptr>::iterator = points.begin(); != points.end(); it++) { const point::ptr pointer= *it; ros_info("points are: %s: ", pointer.get()->getname().c_str()); } one more edit:
normally iterator in loop shall set first element of set.
wrong. iterator set iterator pointing first element of set. @rsahu pointed out below, can't assign container element iterator, (a) logical error , (b) syntax error. and, may want begin iteration position other collection start, "to first element" part not quite correct either.
and 1 more op's reference:
what smart pointer , when should use one?
Comments
Post a Comment