C++ List Insert -
i'm trying insert objects list in ordered manner, based on objects data member family_id
the first object created skips function, there @ least 1 object in list named 'families' before function executed.
running trouble list insert function... how can insert before or behind iterator (itr) using function? i'm not sure whether use push_front / push_back methods, if/else statement can quite long way...
would appreciate ideas on how create in simple way.
family class
class family { private: int family_id; public: int get_family_id() { return family_id; } }; main
list <family> families; void insertfamily(int input_id) { list<family>::iterator itr; for(itr = families.begin(); itr != families.end(); itr++) { if (input_id < itr->get_familyid()) { family *fam = new family(input_id); families.insert(itr, *fam); // insert object first position of list, // bumping original second position? } else itr++ } };
if you're asking think you're asking, insert function put value position given, , push else back. example:
#include <list> #include <iostream> int main(){ std::list<int> my_list; for(int = 0; < 5; i++) my_list.push_back(i); std::list<int>::iterator itr = my_list.begin(); ++itr; my_list.insert(itr, 5); for(itr = my_list.begin(); itr != my_list.end(); ++itr) std::cout << *itr << " "; } prints 0 5 1 2 3 4
so if want insert before whatever stop on, call insert given; if want insert after whatever stop on, call ++itr , insert.
edit: if i'm reading code right, you're missing break statement
family *fam = new family(input_id); families.insert(itr, *fam); break; ^^^^ this breaks loop when you're done; without it, you'll keep adding new families same id every family lower index. also, don't need itr++ in else statement, since it's being called in loop (unless want increase twice when it's not matched?). code might like:
main
list <family> families; void insertfamily(int input_id) { list<family>::iterator itr; for(itr = families.begin(); itr != families.end(); itr++) { if (input_id < itr->get_familyid()) { family *fam = new family(input_id); families.insert(itr, *fam); break; //added break line } //removed else }; if want faster insertion, might binary searching, won't unless have large list. other that, code looks good!
Comments
Post a Comment