具有任意索引的数组的 C++ 类

标签 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;
}

最佳答案

实际上,您应该使用带有偏移量的 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/

相关文章:

c - 删除一个元素 C 中的结构体数组问题

c++ custom UI ToolKit -- 跨平台抽象层的选项

c++ - Const 函数的参数 : should it be passed by reference or not?

c++ - 如何使用构造函数声明指向用户定义对象的指针?

c++ - 为什么数组不打印第一个元素?

javascript - 推送到数组的数据不会保留在数组中

python - 重复 numpy 操作的预期行为

arrays - 将多个索引处的项目插入数组

api - 编写从 Lua 调用的 API - 基于 0 还是 1?

c++ - 流上的 >> 运算符如何返回对自身的引用