C++从树中检索对象

标签 c++ pointers tree binary-search-tree

我正在从事一个项目,其中我有一个帐户类来存储不同基金的余额。每个账户对象有10笔资金,资金从0开始,可以进行存取款、转账等交易。我需要在添加这些帐户时将它们存储在二叉搜索树中,并且我的检索功能存在问题。代码如下:

bool Retrieve(const int & acctNum, Account* acctPtr)
{
    if (Search(root, acctPtr, acctNum))
        return true;
    else
        return false;
}

bool Search(Node* temp, Account* acctPtr, int acctNum)
{
    if (temp == NULL) {
        return false;
    }
    else if (temp->pAcct->getAcct() == acctNum)
    {
        acctPtr = temp->pAcct;
        return true;
    }
    else if (acctNum <= temp->pAcct->getAcct())
    {
        return Search(temp->left, acctPtr, acctNum);
    }
    else
    {
        return Search(temp->right, acctPtr, acctNum);
    }
}

我遇到的问题是当我存入账户然后取回并尝试取款时,它并没有给我同一个账户。相反,它只是试图从一个余额为 0 的帐户中取款。我的意图是让 acctPtr 指向正确的账户来进行转账/取款/存款。以下是我如何从用于完成事务的不同类中调用检索:

    if (transType == "D")
    {
        iss >> acctNum >> amt;
        fund = parseCommand(acctNum);
        acctNum = acctNum.substr(0, acctNum.length() - 1);

        Account * d = new Account("name", stoi(acctNum));
        if (bST->Retrieve(stoi(acctNum), d))
        {
            d->deposit(fund, amt);
            cout << d->getFundBalance(fund) << endl; //for checking, will remove
        }
    }
    else if (transType == "W")
    {
        iss >> acctNum >> amt;
        fund = parseCommand(acctNum);
        acctNum = acctNum.substr(0, acctNum.length() - 1);

        Account * wD = new Account("name", stoi(acctNum));
        if (bST->Retrieve(stoi(acctNum), wD))
        {
            wD->withdraw(fund, amt);
            cout << wD->getFundBalance(fund) << endl; //for checking, will remove
        }
    }

上面的 if 语句只是检查给定时间的交易类型。

最佳答案

在您的搜索函数中,您使用参数 acctPtr 作为输出(您为其分配了一个新值)。

但是你的指针不是输出参数。

您应该使用帐户** 或帐户*&。

你将不得不像这样使用 Retrieve 方法:

Account* d = NULL;
if(bST->Retrieve(stoi(acctNum),&d /* or just d if Account*& */))
{ ... }

如果你使用Account**版本,别忘了给指针赋值

*acctPtr = temp->pAcct;

关于C++从树中检索对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49178356/

相关文章:

c++ - 二维点集的压缩 - 想法?

c++ - 具有递归算法的 SIGSEGV

c++ - 声明对 Ints 数组的引用时,为什么它必须是对 const 指针的引用?

algorithm - 如何计算树编辑距离?

c++ - C++中的netcat命令

c++ - 移动语义 + 对成员的成员变量的引用 - 解决方案和命名法?

c - 取消引用双指针以传递给递归函数

c - 如何交换指针变量以声明一个大小最初未知的数组?

在树目录结构中查找历史操作的算法

c - 你如何找到图中所有可达的节点