所以我正在查看c的igraph库的源代码,因为我需要创建一种新类型的图,它不包含在该库中,但它在某种程度上与自由缩放网络的健身模型图相关。在阅读与构建此类图相关的代码时,我发现这些函数在很多情况下都会被调用:
(void) IGRAPH_VECTOR_INIT_FINALLY(igraph_vector*,long_int);
(void) igraph_vector_cumsum(igraph_vector*,igraph_vector*);
我似乎无法通过文件夹找到它,并且我已经在网上搜索过,但似乎我无法找到它的作用。例如,在我的部分代码中:
/* Calculate the cumulative fitness scores */
IGRAPH_VECTOR_INIT_FINALLY(&cum_fitness_out, no_of_nodes);
IGRAPH_CHECK(igraph_vector_cumsum(&cum_fitness_out, fitness_out));
max_out = igraph_vector_tail(&cum_fitness_out);
p_cum_fitness_out = &cum_fitness_out;
其中 cum_fitness_out 是一个空 vector ,no_of Nodes 是节点数,igraph check 是一个检查函数 igraph_cumsum 的返回值的函数, vector tail 返回 vector 的最后一个元素...
最佳答案
IGRAPH_VECTOR_INIT_FINALLY(vector, size)
是以下内容的简写:
IGRAPH_CHECK(igraph_vector_init(vector, size));
IGRAPH_FINALLY(igraph_vector_destroy, vector);
基本上,它用给定数量的未定义元素初始化一个 vector ,检查内存分配是否成功,然后将该 vector 放在包含列表的所谓的finally stack之上如果后续代码中出现错误,则应销毁这些指针。有关 IGRAPH_FINALLY
的更多信息,请参阅 here .
igraph_vector_cumsum()
计算 vector 的累积和;其来源可以在src/vector.pmt
中找到。 .pmt
代表“穷人的模板”;它本质上是一个带有一堆宏的 C 源文件,允许库通过一些宏技巧为不同的基本类型(整数、 double 、 bool 值等)快速“生成”相同的数据类型(例如 vector )。
关于c - igraph_vector_init_finally 和 igraph_vector_cumsum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39106604/