有了一个功能,getNextIdx
,我想接收一个数组的新索引,该索引取决于当前索引和该索引处数组的值。
我希望函数通过将当前索引与该索引处的数组值相加来返回新索引,并以数组大小为模。
#include<vector>
using namespace std;
int getNextIdx(int currentIdx, vector<int> array) {
int jump = array[currentIdx];
int nextIdx = (currentIdx + jump) % array.size();
return (nextIdx >= 0) ? nextIdx : nextIdx + array.size();
}
int main() {
vector<int> test = {2, 3, 1, -4, -4, 2};
int nextIdx = getNextIdx(3, test);
}
示例:如果当前索引为 3(第 4 个元素),并且数组中第 4 个元素的值为 -4,并且数组的大小为 6,则该函数应返回 5。
问题是我的程序在上面的示例中返回 3。
关于示例代码应该考虑的另一个问题是类型转换的发生。由于 array.size()(6) 的类型是 size_t,而另一方面,另一个数字是负数,因此编译器将负数转换为 size_t,然后对其应用模运算符。例如 (-1)% 6 的输出是 (-1) 但 (-1) % array.size() 的输出是 (3) 因为 (-1) 转换为 size_t 并变成 (4294967295)(基于在平台上,输出应该有所不同),因此 (4294967295 % 6) 的模为 (3)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)