【问题标题】:what is difference between vector<int> v(N) and vector < int > v [N]? [closed]vector<int> v(N) 和 vector<int> v [N] 有什么区别? [关闭]
【发布时间】:2016-05-30 10:52:39
【问题描述】:

vector&lt; int &gt; v(N) 是什么?

  1. 它是一个最大大小为N的数组吗(比如vector&lt;int&gt; v)?

  2. vector&lt;int&gt; v[N]一样吗?

我认为这是第一个(如果我错了,请纠正我)。

vector&lt; vector&lt; int &gt; &gt; V(N) 是什么?它像最大尺寸N 的二维数组吗? vector &lt; int &gt; v[N]vector&lt; vector&lt; int &gt; &gt;v(N) 有什么区别?

【问题讨论】:

  • "它是一个动态数组,可以有最大 N 的大小(如向量 v)吗?" - array 在 C++ 中意味着非常特殊的东西,虽然向量的行为很像数组,但它不是数组。你应该重新提出你的问题。
  • 真的一点儿努力都没有。 vector (3).
  • 动态是在大小没有动态值的情况下。抱歉写动态数组
  • 对这个问题的投票下雨应该告诉你你的问题本质上有问题。 您至少可以停止编辑它吗,因为您的每一次编辑都会使答案无效?
  • 尽管这个问题很糟糕,但我不建议关闭它,因为它得到了一个很好的答案。

标签: c++ arrays vector stl


【解决方案1】:

假设

  • N 是某种整数,
  • 在某处有一个#include &lt;vector&gt;
  • 在某处有 using namespace std;using std::vector;...

这是std::vector&lt; int &gt; 类型的对象v 的声明,初始化为保存N 对象(int 类型),这些对象是默认初始化的(即不确定,因为int 是未定义默认初始化的 POD 类型)。

Documentation of vector constructors -- 这是案例(2)。

Spiral rule -- 这需要适应 C++ 但仍然是一个好的开始。

不是“动态数组行vector v”,它向量。

不,它与vector v[N](甚至无法编译)相同。它 vector&lt;int&gt; v[N] 相同——这将是N 不同vector&lt;int&gt; 对象的数组。


如果是第一个,那么vector&lt; vector&lt; int &gt; &gt; V(N) 是什么?

既然是不是第一个,那我还要回答这个吗? :-D

vector< vector< int > > V(N);

这是vector&lt; vector&lt; int &gt; &gt; 类型的对象V 的声明,即“int-vectors 向量”,初始化为保存N 默认初始化对象...

...即,包含 vector&lt; int &gt;N 对象的向量——这些对象又是空的(因为“空”是默认初始化的向量)。


C++ 有...

  • 数组 (int v[N];),其工作方式与 C 数组完全相同。
  • std::vector (std::vector&lt; int &gt; v;),大小是动态的。
  • std::array (std::array&lt; int, N &gt;;),与 C 数组一样大小是静态的,但确实提供了 std::vector 的一些细节。

您需要准确说明您所指的内容。这些是完全不同的类型,具有不同的功能集。


更新:

根据您最近的几次修改,很明显您的真正问题是:

什么是vector

它是一个 C++ 类模板,它实现了一个容器,该容器可以保存给定类型的连续元素(类似于一个 C 数组),但是是动态大小的(不像一个 C数组)。

See the documentation.

一般来说,您不再在 C++ 代码中使用 C 数组,除了一些真的特殊情况。 std::string 用于字符串,std::vector 用于(几乎)您在 C 中使用数组的所有其他内容。

【讨论】:

  • 是向量 > 像向量 v[N] ?
  • @SammeeSharma:我强烈建议您选择a good C++ bookstd::vector 对应于 C 风格的数组,例如 2015 Sedan 对应于 Ford T。是的,两者都保存连续的对象,并且通常通过v[ index ] 访问,但这只是相似之处。并且 try 参考您正在使用的类型的文档...
【解决方案2】:

std::vector&lt;int&gt; v(N)声明一个变量v,其类型为std::vector&lt;int&gt;,并初始化向量的大小以保存默认初始化的N ints,这意味着在这种情况下它们的初始值是未定义的。

std::vector 是来自 C++ 标准库的模板,它实现了一个可调整大小的数组,其元素连续存储在内存中。它本质上是 C 数组的更安全替代方案。

【讨论】:

  • 只为头像投票。 :-D
  • 谢谢,是的,我很肯定默认初始化的非 POD 类型被初始化为不确定的值,这比说初始值未定义更好。无论哪种方式,它都遵循“你不为你不使用的东西付费”的一般 C++ 规则。请参阅此处:en.cppreference.com/w/cpp/language/default_initialization -- 如果需要,您可以将初始值作为第二个参数提供给构造函数。
  • 是的,找到了信息(在那个页面上......)并从我的评论中编辑了问题(并澄清了我的答案)。由于我对初始化我的价值观非常有强迫症,所以这件事从来没有出现在我身上。 ;-)
猜你喜欢
  • 2021-08-26
  • 2022-01-13
  • 2020-07-15
  • 1970-01-01
  • 1970-01-01
  • 2021-07-30
  • 2021-11-07
  • 2022-08-07
  • 1970-01-01
相关资源
最近更新 更多