我正在编写一个构造函数,该构造函数会将元素从声明为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
。
基于这些限制,一种技术是否比另一种更快?或者,是否有第三种我没有想到的算法会比我已经拥有的算法快?