[英]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.