我是 C++ STL 的新手,无法理解图形表示。
vector<int> adj[N];
那么这会创建一个向量类型的数组还是创建一个数组向量? BFS 代码似乎遍历了 adj[i] 的每个实例中存在的值列表,因此它看起来就像一个向量数组。创建向量的语法是:
vector<int> F;
这将有效地创建一维向量 F。
和有什么区别
vector< vector<int> > N;
和
vector<int> F[N]
原文由 thematroids 发布,翻译遵循 CC BY-SA 4.0 许可协议
它创建向量数组
在第一种情况下,您正在创建一个动态数组的动态数组(向量的向量)。每个向量的大小可以在运行时更改,所有对象都将在堆上分配。
在第二种情况下,您正在创建一个固定大小的向量数组。您必须在编译时定义
N
,并且所有向量都将放在堆栈上† ,但是,每个向量都将在堆上分配元素。在编译时大小的情况下,我总是更喜欢向量大小写的向量(或矩阵,如果您可以使用第三方库),或者
std::array
的std::array
s。您也可以将图形表示为
std::unordered_map<vertex_type,std::unordered_set<vertex_type>>
,其中vertex_type
是顶点的类型(在您的情况下为int
)。当边的数量不是很大时,可以使用这种方法来减少内存使用。† :准确地说 - 并不总是在堆栈上 - 它可能是堆上复杂对象的一部分。而且,C++标准并没有对栈和堆定义任何要求,它只提供了对存储时长的要求,例如自动、静态、线程或动态。