我需要一种非常快速的方式来检查数组的边界。
我当前的边界检查如下:
template<typename T>
class SmartArray {
//...
int size;
T* array;
T &operator[](int index) {
if (index/size!=0)
throw OUT_OF_RANGE; //#define OUT_OF_RANGE 0x0A
return array[index];
}
}
有更快的方法来检查索引是否超出数组范围吗?
编辑:
我的解决方案在处理负索引时出现问题。有没有办法解决这个问题?
std::vector
有什么问题? - Sergey Kalinichenkosize_t
,而不是int
。这通常是一个坏主意。提供像std::vector::at()
这样的方法来进行边界检查,并明确指出它会带来一些代价。尽可能让operator[]
快速运行。 - Ed S.array[index]
会比对size
进行多次检查更为低效。原因是,在第一次检查结束后,size
将被保存在CPU寄存器中,而array[index]
可能还没有被加载到缓存中。 - MSalters