【问题标题】:What does this declared vector in C++ mean?这个在 C++ 中声明的向量是什么意思?
【发布时间】:2019-11-20 15:16:22
【问题描述】:

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

#define NP 2
#define MAX 2000

typedef pair<int, double> edge;

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

这里我不能理解的是,vector真正存储了什么,[NP][MAX]决定了什么?

【问题讨论】:

  • 我会问你 -- int vec[NP][MAX]; 是什么意思?如果您知道这意味着什么,那么找出vector&lt;edge&gt; vec[NP][MAX]; 的问题是什么?
  • 整个扩展为vector&lt;pair&lt;int, double&gt;&gt; vec[2][2000]。简单地说,一个二维向量数组。
  • 我想提一下,在 C++ 中应该禁止宏。宏标识符不是namespaces 的主题,这可能会导致意想不到的奇怪效果。在这种情况下,const 整数变量也可以。
  • MAX 似乎也表明这两个数组组件确实也应该是vector/array,例如vector&lt;vector&lt;vector&lt;edge&gt;&gt;&gt; 或 vector&lt;array&lt;vector&lt;edge&gt;, NP&gt;&gt;。 vector 正确处理不同大小的数组,无需通过引入最大大小和手动跟踪实际大小来限制程序。
  • @RokasVišinskas 你在 cmets 中回答

标签: c++ vector macros typedef


【解决方案1】:

没有“向量”——有很多向量。很多!

就像int foo[5] 创建一个包含五个ints 的数组,而int foo[5][10] 创建一个总共五十个ints 的二维数组......

…vector&lt;edge&gt; vec[5][10] 创建一个包含 50 个 vector&lt;edge&gt;s 的数组。

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

所以它是一个vector&lt;edge&gt; vec[2][2000],或四千个vector&lt;edge&gt;s。

edge 类型是pair&lt;int, double&gt; 的别名(谢谢typedef!),所以它真的是:​​

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

这可能不是真正的意图。尽管向量数组没有任何违法之处,但它们有点“双重肯定”。向量已经是一个类似数组的东西,作者似乎想创建一种“二维向量”,但做错了。但是,如果不问他们,我们无法确定这一点。

【讨论】:

  • @Caleth:哈哈,是的。我想我会做到[5][5] ...然后,就像,没有。 ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-20
  • 2022-12-05
  • 1970-01-01
  • 1970-01-01
  • 2022-07-20
相关资源
最近更新 更多