我有一个非常大的类型数组(短*)。如何以最快的方式将所有值减去常量?
答案 0 :(得分:0)
使用for循环确实是最有效的方法
short *arr = new short[1000000];
const short c = 8504;
//populate the array
Populate(arr); //just some method to populate the array
for(int i=0;i<1000000;i++){
arr[i] = c - arr[i] ;//subtract from the constant
//or even
//*arr = c - *arr++ ;
}
此代码不会检查类型溢出。
答案 1 :(得分:0)
如果您不需要重新计算实际值,可以根据使用情况进行临时计算:
#include <iostream>
using namespace std;
struct OffsetShort {
short value;
static short offset;
operator short() const { return value - offset; }
};
short OffsetShort::offset = 0;
int main() {
OffsetShort *vals[] = {new OffsetShort{1},new OffsetShort{2},new OffsetShort{3}};
for (auto f : vals) {
cout << *f;
}
OffsetShort::offset = 10;
for (auto f : vals) {
cout << *f;
}
return 0;
}
打印
123
-9-8-7