请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

在有权图8-1这一节,我不是很明白Edge<Weight>& e这种写法的意义,请问老师不是不可以给我解释一下啊

输入正文

#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的代码:

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 回复 有任何疑惑可以回复我~
  • 提问者 慕九州3352676 #1
    哇!谢谢老师
    回复 有任何疑惑可以回复我~ 2018-10-14 16:49:09
  • VOW_ #2
    老师,请问vector<vector<Edge<Weight> *> >可以理解为vector<vector<double *> >吗
    回复 有任何疑惑可以回复我~ 2021-11-16 21:39:54
  • liuyubobobo 回复 VOW_ #3
    我不确定你说的“理解为”是什么意思。这两者都是 vector<vector<T>> 的结构,在这一点是一样的。但一个存放的是 Edge<Weight>* 类型的元素,一个存放的是 double* 类型的元素,这是不一样的。Edge<Weight>* 类型不是 double* 类型。
    
    课程中对 Edge<Weight>* 类型的定义(就是 Edge 类),可以参考这里:https://git.imooc.com/coding-71/coding-71/src/master/08-Minimum-Span-Trees/Course%20Code%20%28C++%29/01-Weighted-Graph/Edge.h 继续加油!:)
    回复 有任何疑惑可以回复我~ 2021-11-17 02:50:08
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信