首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >BST C++中的回调函数和函数指针故障

BST C++中的回调函数和函数指针故障
EN

Stack Overflow用户
提问于 2014-05-28 09:22:56
回答 1查看 630关注 0票数 1

我必须创建一个二进制搜索树,它是模板化的,可以处理任何数据类型,包括像对象这样的抽象数据类型。由于不知道对象可能具有哪些类型的数据以及要比较哪些数据,因此客户端必须创建比较函数和打印函数(因为也不确定必须打印哪些数据)。

我已经编辑了一些C代码,我被定向到并试图使用模板,但我不知道如何配置客户端显示函数。我怀疑必须传入类BinarySearchTree的变量‘BinarySearchTree’,但我不知道如何做到这一点。

对于这个程序,我创建了一个整数二进制搜索树,并从一个文件中读取数据。如能对代码或问题提供任何帮助,将不胜感激:)

Main.cpp

代码语言:javascript
复制
#include "BinarySearchTreeTemplated.h"
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

/*Comparison function*/
int cmp_fn(void *data1, void *data2)
{
    if (*((int*)data1) > *((int*)data2))
        return 1;
    else if (*((int*)data1) < *((int*)data2))
        return -1;
    else
        return 0;
}

static void displayNode()  //<--------NEED HELP HERE
{
    if (node)
        cout << " " << *((int)node->data)
}

int main()
{
    ifstream infile("rinput.txt");
    BinarySearchTree<int> tree;

    while (true) {
        int tmp1;
        infile >> tmp1;
        if (infile.eof()) break;
        tree.insertRoot(tmp1);
    }
        return 0;
}

BinarySearchTree.h (有点太大了,不能在这里格式化)

http://pastebin.com/4kSVrPhm

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-28 11:13:39

我认为服务器端应该提供比较和打印功能。这也可以作为模板来完成。

代码语言:javascript
复制
template <class T>
int cmp_fct( const T& rhs, const T& lhs ) {
    if( rhs < lhs) return -1;
    else if (rhs > lhs) return 1;
    return 0;
}

同样的程序用于displayNode。

现在,客户端必须提供一些操作员:

代码语言:javascript
复制
struct TestObject {
    int i;

    friend bool operator<( const TestObject& rhs, const TestObject& lhs ) {
        return rhs.i < lhs.i;
    }

    friend bool operator>( const TestObject& rhs, const TestObject& lhs ) {
        return lhs < rhs;
    }

    // and stream operators 
    friend std::ostream& operator<<( std::ostream& output, const TestObject & ob)
    {
        output << ob.i;
        return output;
    }
};

此外,我将考虑为您的c++使用BinarySearchTree方法,即使用智能指针而不是原始指针。

您的BinarySearchTree创建对象,但从不删除它们。

避免使用空指针,使用接口(例如INode),而客户端必须从接口派生.

使用构造函数初始化列表,否则,对象将由默认构造函数创建,然后在构造函数中重新分配。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23907629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档