向量特定语法的向量

Vector of Vector specific syntax

本文关键字:向量 语法      更新时间:2023-10-16

i通常声明(并定义)我的向量的向量,

vector<vector<int>> graph = *new vector<vector<int>>(n, *new vector<int>(n, 0));

这里已经定义了n。而且这通常在大多数编译器中都可以正常工作。但是几天前,我尝试将源文件导入另一个系统,并充满了汇编错误,类似于
"'>>'之后的预期主要表达我不记得确切的错误,但确实知道,在双方添加">"和'>'之间的空间后,删除了错误。即。

vector<vector<int> > graph = *new vector<vector<int> >(n, *new vector<int>(n, 0));

我知道该语法要求我们在两个'>之间添加空格,但是我想知道编译器之间是否有任何区别,因为两者都使用了C 11甚至相同的IDE。我使用了很长时间的语法,编辑每个语法将非常令人沮丧。知道它可以使用哪些编译器会更容易。

我给你一个分为两部分的答案:

vector<...> v = *new vector<...>(...)

基本上,您不应该这样做。
向量执行自己的内存管理,因此无需RAW new 。另外,在此行中,您可以在堆上分配内存(仅12或24个字节,具体取决于您的系统),然后将此向量分配给堆栈上的向量v(这可能涉及一份内容的副本整个矢量)。堆上的向量永远不会被删除,因此内存泄漏。

更好:

vector<vector<int>> graph = vector<vector<int>>(n, vector<int>(n, 0));

或只是

vector<vector<int>> graph(n, vector<int>(n, 0));

现在对您最初问题的答案:C 标准开始允许>>从C 11开始关闭嵌套模板(请参阅此相关问题),因此您需要配置编译器至少使用C 11标准(通常使用-STD = C 11标志)。但是,我知道的几乎所有最近的编译器默认情况下已经使用了此标准。

要获得更详细的答案,您需要告诉我们您使用的IDE和编译器。