向量数组还是数组向量?

类鼻类

我是C ++ STL的新手,我无法理解图形表示。

vector<int> adj[N];

那么这会创建向量类型的数组还是会创建数组的向量?BFS代码似乎遍历了adj [i]的每个实例处存在的值列表,因此,它的工作方式似乎是向量数组。创建向量的语法是:

vector<int> F;

这将有效地创建一维矢量F。

之间有什么区别

vector< vector<int> > N; 

vector<int> F[N]
敬畏

那么,这个(vector<int> adj[N];)是否创建类型为vector的数组,或者这会创建为数组的vector?

它创建向量数组

之间有什么区别

vector< vector<int> > N; 

vector<int> F[N]

在第一种情况下,您将创建动态数组的动态数组(向量的向量)。每个向量的大小可以在运行时更改,并且所有对象都将分配在堆上。

在第二种情况下,您将创建固定大小的向量数组。您必须N在编译时进行定义,并且所有向量都将放在堆栈†中,但是,每个向量都将在堆上分配元素。

我总是喜欢矢量情况下的矢量(或矩阵,如果你可以使用第三方库),或std::arraystd::arrayS IN编译时尺寸的情况下。

我是C ++ STL的新手,我无法理解图形表示。

您也可以将图形表示为std::unordered_map<vertex_type,std::unordered_set<vertex_type>>,其中vertex_type顶点的类型(int在您的情况下)。当边缘数量不多时,可以使用此方法来减少内存使用。


:确切地说-并非总是在堆栈上-它可能是堆上复杂对象的一部分。而且,C ++标准未定义对堆栈或堆的任何要求,它仅提供对存储持续时间的要求,例如自动,静态,线程或动态。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章