我已经实现了一个红黑树,它运行良好。但是,我需要通过在 C++ 中使用模板(泛型)来实现它可以与任何数据类型一起使用的方式。 向树中添加项目时,键和项目本身都应该是泛型类型(C++ 模板)
代码:
RB_Node* RedBTree::RBTInsert(void* key, void* item)
{
RB_Node* y;
RB_Node* x;
RB_Node* newNode;
//rest of algorithm
}
如何将这 2 个参数作为通用参数?我是 C++ 和模板本身的新手,非常感谢任何帮助
最佳答案
您可以使用 template
开始您的声明,然后是一组合适的模板参数,用结果名称替换您的 void*
,并假装模板参数只是恰好是普通类型。只要您不需要任何关联类型并且您的代码只需要为常规类型参数工作,您就可以了:
template <typename Key, typename Value>
RB_Node* RedBTree<Key, Value>::RBInsert(Key const& key, Value const& item)
{
// pretty much like before...
}
当我开始使用模板时,我首先用具体类型实现我的代码,确保它能正常工作,然后用模板参数替换具体类型。一段时间后(我想不到 5 年)我跳过了先写具体类型的东西。事实证明,一旦您了解了模板的相关知识,就概念而言编写实际上比费心于具体类型更容易。
关于C++ 模板(在插入方法中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20961285/