0

在这种情况下,它是一棵二叉树而不是二叉搜索树,模板中只有一个类型为 T 的参数。如主函数所示,我不需要显式 min_height(v, 0, 5),而是 min_height (v, 0, 5) 就足够了。但是,在二叉搜索树的情况下,有两个模板参数,用法不起作用。我想知道为什么?非常感谢你!

#include <iostream>
#include<string>
#include<vector>
using namespace std;
template<typename T>
struct BTNode{
 T data;
 BTNode * left;
 BTNode * right;
 BTNode(T d, BTNode *left=NULL, BTNode * right=NULL): data(d) {} 
 };

template<typename T>
BTNode<T>* min_height(vector<T> &v, int left, int right ){// here is different from my paper code

 if(left<=right){
    int mid=left+ (right-left)/2;
    BTNode<T>* node=new BTNode<T>(v[mid]);
    node->left=min_height(v, left, mid-1 );
    node->right=min_height(v, mid+1, right );
    return node;
    }
}

int main() {
  vector<int> v;
  v.push_back(1);
  v.push_back(2);
  v.push_back(3);
  v.push_back(4);
  v.push_back(5);
  v.push_back(6);
  BTNode<int>* root=min_height(v, 0, 5);

  return 0;
}
4

1 回答 1

1

因为在单个模板参数 T 的情况下,您在其中一个参数中使用 T,第一个参数是向量 &v。所以当编译器看到这一行时

BTNode<int>* root=min_height(v, 0, 5);

在 main() 中,它尝试推断 T 的类型,看到第一个参数 v 是类型vector<int>,并且可以推断 T = int。

在您上一个问题的另一种情况下,第二个模板参数 Value 不在传递给 min_height 函数的任何类型中。它只是在返回的类型中,但是 C++ 不能从返回值的类型推断模板参数类型,只能从传入参数的类型推断,所以它无法确定 Value 使用什么类型,你必须使用 . 明确指定它min_height<int,int>

于 2013-03-13T04:25:52.570 回答