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?

is practice use smart pointers?

when should use raw pointers on smart pointers?


Comments

Popular posts from this blog

java - pagination of xlsx file to XSSFworkbook using apache POI -

Unlimited choices in BASH case statement -

apache - How do I stop my index.php being run twice for every user -