如何返回列表中指针的值?

时间:2015-05-31 23:01:39

标签: c++ list class pointers vector

我有一个"派系" 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_;
}

但是我在为我的列表提出类似的方法时遇到了麻烦。它没有相同的工作,我不知道为什么。也许还有另一种方式?

1 个答案:

答案 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**iFaction*,这意味着如果您想要调用Faction成员函数,必须另外取消引用它:

std::cout << (*i)->getFactionName() << std::endl;

最后,除非您确实需要list,否则请坚持使用vector