c++ - How to return the value of a pointer in a list? -
i've got "faction" class, , vector of pointers want turn list. method it. assume i've managed turn vector of pointers list alright in first part, want print list out within method. know using '*', i'm printing out memory location opposed value, , that's code doing.
list<faction*> faction::linklistfactions() { list<faction*> list_factions(factionptr_.begin(), factionptr_.end()); cout << "printing linked list:" << endl; (int = 0; < list_factions.size(); a++) { std::list<faction*>::iterator = list_factions.begin(); advance(i, a); cout << *i; cout << ","; } return list_factions; }
but want print out value, not memory location. instead of
cout << *i;
i can like
cout << i->getfactionname();
i able vector, simple enough:
string faction::getfactionname() const { return factionname_; }
but i'm having trouble coming similar method list. doesn't work same, , i'm not sure why. perhaps there's way?
first of all, iteration o(n^2)
instead of o(n)
(because advance()
on list::iterator
have call ++
a
times - it's linear-time operation). proper way in c++03 iterate through list use iterators:
for (std::list<faction*>::iterator = list_factions.begin(); != list_factions.end(); ++i) { ... }
which in c++11 reduces to:
for (faction* : list_factions) { ... }
secondly, i
"points" faction*
: *i
faction*
, means if want call faction
member functions, have additionally dereference it:
std::cout << (*i)->getfactionname() << std::endl;
lastly, unless you're really sure need list
, stick vector
.
Comments
Post a Comment