C++ 中这个声明的向量是什么意思?

What does this declared vector in C++ mean?

我是 C++ 的新手,所以我很难理解一些复杂的术语,例如宏和预处理器。下面附上我看不懂的代码:

#define NP 2
#define MAX 2000

typedef pair<int, double> edge;

vector<edge> vec[NP][MAX];

这里我无法理解的是,vector到底存储了什么,[NP][MAX]又决定了什么?

没有"a vector"——有很多向量。很多!

正如int foo[5]创建一个5int的数组,int foo[5][10]创建一个总共50int的二维数组…

vector<edge> vec[5][10] 创建一个包含五十个 vector<edge> 的数组。

现在添加宏:这只是文本替换(或多或少),因此数组维度是通过常量名称提供的,而不是在声明中作为数字提供。

所以它是 vector<edge> vec[2][2000],或四千 vector<edge>s。

类型 edgepair<int, double> 的别名(感谢 typedef!),所以它实际上是:

vector<pair<int, double>> vec[2][2000].

这可能不是真正想要的。尽管向量数组没有任何违法之处,但它们有点 "double-positive"。 vector 已经是一个类似数组的东西了,看来作者是想搞一个"two-dimensional vector",但是做错了。不过,如果不问他们,我们无法确定这一点。