我有一个"派系" class,以及我想变成列表的指针向量。这是它的方法。我假设我已经设法在第一部分中将指针向量转换为列表,所以现在我想在我的方法中打印出列表。我知道使用' *',我打印出内存位置而不是值,这正是这段代码的作用。
list<Faction*> Faction::linklistFactions() {
list<Faction*> list_factions(factionptr_.begin(), factionptr_.end());
cout << "printing linked list:" << endl;
for (int a = 0; a < list_factions.size(); a++)
{
std::list<Faction*>::iterator i = list_factions.begin();
advance(i, a);
cout << *i;
cout << ",";
}
return list_factions;
}
但我想打印出值,而不是内存位置。而不是
cout << *i;
我可以做类似
的事情cout << i->getFactionname();
我已经能够为我的载体做到这一点,这很简单:
string Faction::getFactionname() const
{
return factionname_;
}
但是我在为我的列表提出类似的方法时遇到了麻烦。它没有相同的工作,我不知道为什么。也许还有另一种方式?
答案 0 :(得分:1)
首先,您的迭代为O(n^2)
而不是O(n)
(因为advance()
上的list::iterator
必须致电++
a
次 - 这是线性时间操作)。在C ++ 03中迭代列表的正确方法是使用迭代器:
for (std::list<Faction*>::iterator i = list_factions.begin();
i != list_factions.end(); ++i)
{
...
}
C ++ 11中的内容简化为:
for (Faction* i : list_factions) { ... }
其次,i
“指向”Faction*
:*i
是Faction*
,这意味着如果您想要调用Faction
成员函数,必须另外取消引用它:
std::cout << (*i)->getFactionName() << std::endl;
最后,除非您确实需要list
,否则请坚持使用vector
。