我需要一种非常快速的方法来检查数组的边界.我目前的检查范围是:
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];
}
}
Run Code Online (Sandbox Code Playgroud)
有更快的方法来检查索引是否超出数组边界?
编辑:
我的解决方案是用负面索引制造麻烦.有办法解决这个问题吗?
一般来说,划分是一个缓慢的操作,所以我会避免这种情况.
我认为简单的比较会更有效:
index >= size
Run Code Online (Sandbox Code Playgroud)
但是,这将错过index小于0 的情况,但如果使用unsigned或size_t用于size和index变量,则不会出现问题.
所以它变成:
T &operator[](size_t index) {
if (index >= size)
throw OUT_OF_RANGE; //#define OUT_OF_RANGE 0x0A
return array[index];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8307 次 |
| 最近记录: |