我是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::array
的std::array
S IN编译时尺寸的情况下。
我是C ++ STL的新手,我无法理解图形表示。
您也可以将图形表示为std::unordered_map<vertex_type,std::unordered_set<vertex_type>>
,其中vertex_type
顶点的类型(int
在您的情况下)。当边缘数量不多时,可以使用此方法来减少内存使用。
†:确切地说-并非总是在堆栈上-它可能是堆上复杂对象的一部分。而且,C ++标准未定义对堆栈或堆的任何要求,它仅提供对存储持续时间的要求,例如自动,静态,线程或动态。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句