gpt4 book ai didi

C++ 类实例

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:12:16 26 4
gpt4 key购买 nike

我正在做 C++ 入门作业,但我卡住了。

Account *GetAccount(int an);

int main()
{
Account *a1,*a2,*b1;
a1=GetAccount(123);
a2=GetAccount(456);
b1=GetAccount(123);
if(a1==b1)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;

GetAccount 方法应该检查是否已经存在具有相同帐号的实例,如果存在,则返回该实例。

我能想到的唯一方法是创建帐户数组并搜索帐户,如果不存在,则在数组中插入新帐户。如果存在,则返回指向数组的指针。

我觉得这个方法效率不高,还有其他方法吗?

最佳答案

是的。使用 map 代替数组。它在空间方面的填充效率更高,而且速度几乎一样快。

您可以使用 STL 并将您的帐户保存在 std::map 中,这些变体之一:

map<int, Account> or
map<int, Account*>

在第一种情况下,您将帐户保存在映射中,在第二种情况下,您保存指向帐户的指针,并负责创建/删除。哪个变体更合适?这取决于您创建/初始化帐户的方式。


STL map 使用简短教程

当您将指针保留在 map 中时,我将解释这种情况。

这是声明 map 的方式:

map<int, Account*> accounts;

这是向 map 添加新帐户的方法:

int account_id = 123; // or anything else

Account* account = new Account(...paramters for the constructor...)
// any additional code to initialize the account goes here

accounts[account_id] = account; // this adds account to the map

这是检查具有 account_id 的帐户是否在 map 中的方法:

if (accounts.find(account_id) != accounts.end()) {
// It is in the map
} else {
// it is not in the map
}

这是从 map 获取指向帐户的指针的方式:

Account* ifoundit = accounts[account_id];

最后,在程序末尾的某处,您需要清理 map 并删除所有帐户对象。即使没有清理,该程序也能正常工作,但您自己进行清理很重要。我把这个留给你作为练习:)找到如何迭代 map 的所有元素,并适本地应用删除。

关于C++ 类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/947696/

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