C 选择循环内部函数以避免开销的最干净方法?
我有一个计算图的最小生成树的函数,我有两种不同的方法来计算树中的边权重C 选择循环内部函数以避免开销的最干净方法?,c,function,for-loop,C,Function,For Loop,我有一个计算图的最小生成树的函数,我有两种不同的方法来计算树中的边权重 edge\u weight()函数在几个循环中反复调用,使用哪个函数取决于树的类型,树的类型在主函数之外指定(由用户指定) 我的问题是,除了edge\u weight()函数之外,for循环中的所有内容都是相同的,因此我不想复制/粘贴代码 但同时我不想在for循环中设置要使用的edge\u weight()函数的条件,以避免重复的if条件的开销 那么,在不复制/粘贴相同代码的情况下,指定for循环开始之前使用哪个函数的最干净
edge\u weight()
函数在几个循环中反复调用,使用哪个函数取决于树的类型,树的类型在主函数之外指定(由用户指定)
我的问题是,除了edge\u weight()
函数之外,for
循环中的所有内容都是相同的,因此我不想复制/粘贴代码
但同时我不想在for循环中设置要使用的edge\u weight()
函数的条件,以避免重复的if
条件的开销
那么,在不复制/粘贴相同代码的情况下,指定for
循环开始之前使用哪个函数的最干净方法是什么呢
我可以有指向函数的指针吗(这会减慢代码的速度吗?)?
我可以把函数放在变量、数组中吗
编辑:速度对于此应用程序至关重要,因此我尝试避免在for
循环中进行调节
下面是一些伪代码:
while(nodes < threshold)
{
for (int i = 0; i < K; i++)
{
if (nodes[i] == something)
{
weight = one_of_two_edge_weight_functions();
while(节点<阈值)
{
for(int i=0;i
我看不出有什么办法可以让逻辑在某个地方决定调用哪个函数。@TimBiegeleisen,但是你能让逻辑在while循环之外吗?请给出实际问题的一个最小表示。我们可能能够在单独的批次中调用两个权重函数,但你的pseudo-code。除非边权重函数很小、很快且可内联,否则使用函数指针可能不会显著降低速度…如果这两个函数很小且很纯(没有副作用),则可以调用它们并使用三元选择指定结果(?:
),一个好的编译器会将其转化为无分支代码。然而,除非条件预测得非常糟糕,或者循环可以通过这种方式矢量化,否则在现代CPU上不会有性能优势。我看不出有什么办法可以让逻辑在某个地方决定调用哪个函数。@TimBiegeleisen,但你能以某种方式拥有这种逻辑吗在while循环之外?请给出实际问题的最小表示形式。我们可能能够在单独的批处理中调用两个权重函数,但这在伪代码中并不清楚。除非边权重函数很小、很快且可内联,否则使用函数指针可能不会显著降低速度。。。如果这两个函数都很小且很纯(没有副作用),则可以调用这两个函数并使用三元选择分配结果(?:
),一个好的编译器会将其转化为无分支代码。然而,除非条件预测得非常糟糕,或者循环可以通过这种方式矢量化,否则在现代CPU上不会有性能优势。