是否有任何流行的 C++ 库有一个(或多个)类允许开发人员在不牺牲速度的情况下使用具有任意索引的数组?
为了更具体地给出这个问题,我希望可以编写类似于以下的代码:
//An array with indices in [-5,6)
ArbitraryIndicesArray<int> a = ArbitraryIndicesArray<int>(-5,6);
for(int index = -5;index < 6;++index)
{
a[index] = index;
}
最佳答案
实际上,您应该使用带有偏移量的 vector 。甚至是带有偏移量的数组。额外的加法或减法不会对程序的执行速度产生任何影响。
如果您想要与默认 C 数组具有完全相同速度的东西,您可以将偏移量应用于数组指针:
int* a = new int[10];
a = a + 5;
a[-1] = 1;
但是,不推荐。如果你真的想这样做,你应该创建一个带有隐藏可怕代码的内联函数的包装类。您保持了 C 代码的速度,但最终能够添加更多错误检查。
如评论中所述,更改数组指针后,您不能再使用该指针进行删除。您必须将其重置为数组的实际开头。另一种方法是始终将指针指向开头,但使用另一个修改后的指针。
//resetting the array by adding the offset (of -5)
delete [] (a - 5);
关于具有任意索引的数组的 C++ 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2312129/