vector <int> v(N)和vector&lt;之间的区别是什么? int&gt; v [N]?

时间:2016-02-18 10:19:02

标签: c++ arrays vector stl

什么是vector< int > v(N)

  1. 这是一个最大尺寸为N的数组(如vector<int> v)吗?

  2. vector<int> v[N]相同吗?

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

    什么是vector< vector< int > > V(N)?它是否像最大尺寸为N的2D数组? vector < int > v[N]vector< vector< int > >v(N)之间有什么区别?

2 个答案:

答案 0 :(得分:10)

假设

  • N是某种整数,
  • 某处有#include <vector>
  • 某处有using namespace std;using std::vector; ......

这是类型v的对象std::vector< int >的声明,初始化为保存N对象(类型为int),默认初始化(即,不确定,因为int是一个没有定义默认初始化的POD类型。)

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

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

“动态数组行vector v”, 是矢量。

不,它vector v[N]相同(甚至不会编译)。 vector<int> v[N]相同 - 这将是N个不同vector<int>个对象的数组。

  

现在,如果是第一个,那么vector< vector< int > > V(N)是什么?

因为第一个,我还需要回答吗? :-D

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

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

...即,一个持有N vector< int >个对象的向量 - 这些对象又是空的(因为“空”是默认初始化的向量)。

C ++有......

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

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

<强>更新

通过最新的几次修改,很明显您的真实问题是:

  

什么是vector

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

See the documentation.

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

答案 1 :(得分:2)

std::vector<int> v(N)声明类型为v的变量std::vector<int>,并初始化向量的大小以保存默认初始化的N整数,这意味着它们的初始值价值未定义。

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

相关问题