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。
类型 edge
是 pair<int, double>
的别名(感谢 typedef
!),所以它实际上是:
vector<pair<int, double>> vec[2][2000].
这可能不是真正想要的。尽管向量数组没有任何违法之处,但它们有点 "double-positive"。 vector 已经是一个类似数组的东西了,看来作者是想搞一个"two-dimensional vector",但是做错了。不过,如果不问他们,我们无法确定这一点。
我是 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。
类型 edge
是 pair<int, double>
的别名(感谢 typedef
!),所以它实际上是:
vector<pair<int, double>> vec[2][2000].
这可能不是真正想要的。尽管向量数组没有任何违法之处,但它们有点 "double-positive"。 vector 已经是一个类似数组的东西了,看来作者是想搞一个"two-dimensional vector",但是做错了。不过,如果不问他们,我们无法确定这一点。