var_name <struct_name> another_name是什么意思?

时间:2018-05-20 13:43:45

标签: c++

我一直在研究压缩算法的一些c ++代码。但是被困在这条线上:

priority_queue<Node*, vector<Node*>, comp> pq;

Node和comp是结构。 你能告诉我这条线的含义吗?

1 个答案:

答案 0 :(得分:2)

语法称为template,它在C ++中经常使用,所以你应该花点时间研究它。

对于某些类型T,大小为10的C样式数组定义为:

T arr[10];

所以

int arr[10];      // Array holding 10 int
float arr[10];    // Array holding 10 float
struct X arr[10]; // Array holding struct X

首先给出元素的类型,它是一个数组的事实来自变量名后面的[10]

C ++中的容器使用模板语法。例如std::vector

std::vector<int> vec;    // Is a vector holding int
std::vector<float> vec;  // Is a vector holding float

你的例子有点复杂,因为在std::priority_queue中,你指定它应该持有的元素的类型,它用于保存元素的容器类型,以及用于对元素进行排序的比较器容器。

priority_queue<Node*, vector<Node*>, comp> pq;
               ^^^^^  ^^^^^^^^^^^^^  ^^^^
               Type   Container      Compare

如果你这样做了

priority_queue<Node*, deque<Node*>, comp> pq;

您仍会获得std::priority_queue,但内部会使用std::deque代替std::vector

BTW:请注意,模板不仅适用于标准容器。您可以编写自己的使用模板的类和函数。