簡體   English   中英

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

[英]How to return the value of a pointer in a list?

我有一個“派系”類,還有一個指針向量,我想將其變成一個列表。 這就是它的方法。 我假設我已經成功地將指針的矢量轉換為列表的第一部分,所以現在我想在我的方法中將列表打印出來。 我知道通過使用“ *”,我將打印出與值相對的內存位置,而這正是此代碼正在執行的操作。

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_;
}

但我在為清單選擇類似方法時遇到了麻煩。 它的工作原理不同,我不確定為什么。 也許還有另一種方式?

首先,您的迭代是O(n^2)而不是O(n) (因為list::iterator上的advance()必須調用++ 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM