Get linear index for multidimensional access(获取多维访问的线性索引)
本文介绍了获取多维访问的线性索引的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试实现一个多维std::数组,它保存一个大小为Dim-n-1*Dim-n-2*...*Dim-1的连续内存数组。为此,我使用来自std::数组:的私有继承 例如,multi_array<5, 2, 8, 12> arr; arr(2, 1, 4, 3) = 12;
将访问线性索引idx = 2*(5*2*8) + 1*(2*8) + 4*(8) + 3
。
我想我必须使用std::INTEGER_SEQUENCE,将一个整数序列传递给线性化函数和索引列表,但我不知道怎么做。我想要的是:
用MULTPLY_BUT_LAST乘以除最后一个维度之外的所有剩余维度(我了解如何使用诸如for factorise之类的常量变量模板函数实现,但我不知道是否可以使用std::INTEGER_SEQUENCE)。
我是各种模板操作和std::INTEGER_SEQUENCE方面的新手,我认为我遗漏了一些东西。是否有可能在没有开销的情况下获得线性索引计算(例如,如果操作是手写的)?
非常感谢您的帮助。
推荐答案
以下内容可能会有所帮助:
Demo
我将factorize
替换为折叠表达式(C++17)。
这篇关于获取多维访问的线性索引的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!