在有权图8-1这一节,我不是很明白Edge<Weight>& e这种写法的意义,请问老师不是不可以给我解释一下啊
来源:8-1 有权图
慕九州3352676
2018-10-14
输入正文
#pragma once
#include<iostream>
using namespace std;
template<typename Weight>
class Edge {
private:
int a;
int b;
Weight weight;
public:
Edge(int a, int b, Weight weight) {
this->a = a;
this->b = b;
this->weight = weight;
}
Edge() {};
~Edge() {};
int v() {
return a;
}
int w() {
return w;
}
Weight wt() {
return weight;
}
int other(int x) {
assert(x == a || x == b);
return x == a ? b : a;
}
//重载输出运算符
friend ostream& operator<<(ostream &os, const Edge &e) {
os << e.a << "-" << e.b << ": " << e.weight;
return os;
}
//重载小于号
bool operator<(Edge<Weight>& e) {
return weight < e.wt();
}
bool operator<=(Edge<Weight>& e) {
return weight <= e.wt();
}
bool operator>(Edge<Weight>& e) {
return weight > e.wt();
}
bool operator>=(Edge<Weight>& e) {
return weight >= e.wt();
}
bool operator==(Edge<Weight>& e) {
return weight == e.wt();
}
};
就是不明白为什么一个类Edge,后面可以用尖括号 ,这种语法以前没见过啊
1回答
-
泛型类。注意,Edge类的定义中,weight的类型是Weight,就是指weight的类型没有固定成int或者double或者float:)
这个课程之前也有使用啊。比如我们所写的二分搜索树的定义是:
template <typename Key, typename Value> class BST{ .... }
所以,我们具体用二分搜索树统次品的实例化方式是:
BST<string, int> bst = BST<string, int>();
可以参考课程的5-4的代码:
如果对泛型不了解,感兴趣,可以在网上搜索更多C++泛型相关的语法内容进行自学。
不过,这部分内容并不是课程的重点,所以,如果不适应,完全可以直接将Edge类定义为其中的weight就是double类型,就避免这个麻烦了:)
加油!:)
052021-11-17
相似问题