gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:14:40 24 4
gpt4 key购买 nike

我有一个“Faction”类和一个指针 vector ,我想把它变成一个列表。这是它的方法。我假设我已经在第一部分成功地将指针 vector 转换为列表,所以现在我想在我的方法中打印出列表。我知道通过使用“*”,我打印出内存位置而不是值,而这正是这段代码所做的。

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();

我已经可以为我的 vector 做这个了,这很简单:

string Faction::getFactionname() const
{
return factionname_;
}

但是我无法为我的列表想出类似的方法。它的工作原理不一样,我不确定为什么。也许还有其他方法?

最佳答案

首先,您的迭代是 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

关于c++ - 如何返回列表中指针的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30563592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com