在C ++

时间:2018-12-01 21:04:23

标签: c++ arrays performance loops optimization

我正在编写一个构造函数,该构造函数会将元素从声明为initializer_list<initializer_list<T>> myInitializerList的2D初始值设定项列表传输到声明为T * arr的1D普通数组(这将按行优先顺序存储元素)。我有两个嵌套的for循环来遍历初始化程序列表,但是我正在尝试优化每个for循环(循环声明中三个语句中的第二个)中的测试表达式。

对于如何执行此操作,我有一些想法,但是我不确定哪个会更快。首先是比较迭代器,并为外循环rowItr != myInitializerList.end()和内循环colItr != rowItr->end()生成测试表达式。

我的第二个想法是比较索引,而不是迭代器,它可能会更快(尽管我不确定)。下面是一个完整的循环,演示了我如何实施第二种策略:

template <typename T> //a numerical type
//intentionally left out constructor definition, variable initialization
for (unsigned currentPosition{ 0 }; currentPosition < numRows*numCols; rowItr++) {
    typename initializer_list<T>::iterator colItr = rowItr->begin();
    for (unsigned currentColumn{ 0 }; currentColumn++ < numCols; colItr++) {
        arr[currentPosition++] = *colItr;
    }
}
//end constructor definition

数组将存储数字类型,最有可能是float,并且维数最多为1024x1024

基于这些限制,一种技术是否比另一种更快?或者,是否有第三种我没有想到的算法会比我已经拥有的算法快?

0 个答案:

没有答案