例如我有一个二维前缀和数组 sum,使用容斥方法计算二维前缀和:sum[i][j] = val[i][j] + sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1];此时,如果数组下标从 0 开始,那么在 i = 0 或 j = 0 时,数组的下标是负数,可能会 RE。如果不想麻烦地特判,应该怎样写比较方便?
我知道一种方法是使用迭代器或指针。例如对于一维 vector:vector<int> a;,可以定义 vector<int>::iterator b = a.begin() + 10,这样就可以写出 b[-10] 这种东西。
但对于二维 vector,这种方法似乎也不是很方便:要先定义一个 vector<vector<int>::iterator> _sum,然后 for(int i = 0; i <= n; i++) _sum[i] = sum[i].begin() + 1;再定义一个 vector<vector<int>::iterator>::iterator __sum;,并 __sum = _sum.begin() + 1,这样才能保证下标为 -1 时不会 RE。有没有更简洁的方法呢?