在有权图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回答

liuyubobobo

2018-10-14

泛型类。注意,Edge类的定义中,weight的类型是Weight,就是指weight的类型没有固定成int或者double或者float:)


这个课程之前也有使用啊。比如我们所写的二分搜索树的定义是:

template <typename Key, typename Value>    
class BST{
    ....
}


所以,我们具体用二分搜索树统次品的实例化方式是:

BST<string, int> bst = BST<string, int>();


可以参考课程的5-4的代码:

https://github.com/liuyubobobo/Play-with-Algorithms/blob/master/05-Binary-Search-Tree/Course%20Code%20(C%2B%2B)/04-Binary-Search-Tree-Search/main.cpp


如果对泛型不了解,感兴趣,可以在网上搜索更多C++泛型相关的语法内容进行自学。


不过,这部分内容并不是课程的重点,所以,如果不适应,完全可以直接将Edge类定义为其中的weight就是double类型,就避免这个麻烦了:)


加油!:)

0
5
liuyubobobo
回复
VOW_
是的,二者都是数据类型。只不过 double 是 C++ 语言自带的数据类型,Edge 是我们自己定义的数据类型(我们自己定义的类)。
2021-11-17
共5条回复

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程