要对数据执行的可变操作数

时间:2015-06-19 13:26:48

标签: algorithm templates c++11

如果C ++无法做到这一点,请纠正我,但这里有一个想法:我有一组数据,我想在运行时执行加法(+),减法( - )和/或乘法( *)。目前我有三个for循环来实现这一点,这意味着它可能很慢。我想将所有这些操作放在一个循环中。

伪代码:

Data ApplyOperations(const Data &a, ... const Data &n, OperatorA(), ..., OperatorN()) {
for (size_t i = 0; i < a.size(); ++i)
   result[i] = a[i] OperatorA() ... n[i] OperatorN();  
return result;
} 

这样,我可以在单个循环中以我想要的顺序应用N个操作。有人能指出我在C ++ 11中实现这个目标的正确方向吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

基本上你有两个嵌套循环,一个在N个集合和运算符的“数组”上,另一个在每个集合中的M个元素上。

从复杂性分析的角度来看,哪个循环是外部循环没有区别;复杂度为O(N * M)。但是,如果作为参数传递给您的函数的数据集实际上是相同的集合,那么在大多数现代体系结构中,通过将数据项的迭代作为外部数据项,您将获得更好的性能。原因是缓存的影响。如果反复遍历数据,则会出现更多缓存未命中,这会对性能产生很大影响。当然,如果你为每个操作员集合传递不同的数据集,那么没有区别。