Bar*_*wek 3 c++ arrays indices
任何流行的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;
}
Run Code Online (Sandbox Code Playgroud)
谢谢...
真的,你应该使用带偏移的矢量.甚至是带偏移的数组.额外的加法或减法不会对程序的执行速度产生任何影响.
如果您想要一个与默认C数组完全相同的速度,可以将偏移量应用于数组指针:
int* a = new int[10];
a = a + 5;
a[-1] = 1;
Run Code Online (Sandbox Code Playgroud)
但是,不建议这样做.如果你真的想这样做,你应该创建一个包含内联函数的包装类,它隐藏了可怕的代码.您可以保持C代码的速度,但最终能够添加更多错误检查.
如注释中所述,在更改数组指针后,您无法使用该指针进行删除.您必须将其重置为阵列的实际开始.另一种方法是始终保持指向开头的指针,但使用另一个修改过的指针.
//resetting the array by adding the offset (of -5)
delete [] (a - 5);
Run Code Online (Sandbox Code Playgroud)