c - igraph_vector_init_finally 和 igraph_vector_cumsum

标签 c igraph

所以我正在查看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/

相关文章:

我可以有一个地址族独立的网络数据包结构吗?

c - 模数项目带来意想不到的结果

c - 为什么要检查函数中 fscanf 返回值 < 1?

python - Python Igraph中如何设置节点的坐标

python - 使用 iGraph 定位边缘标签

r - igraph graph.data.frame 默默地将因子转换为字符向量

c++ - C/C++ Windows - ExtractIcon() 不检索所有可执行文件的图标

c - 三元运算符 vs if else

r - 如何从图中取回顶点ID

python - 检查两个顶点是否在 iGraph 中连接