gpt4 book ai didi

c++ - 模块化操作 (%) 提供错误输出

转载 作者:行者123 更新时间:2023-12-01 14:18:15 26 4
gpt4 key购买 nike

使用 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)(based在平台上,输出应该不同)所以 (4294967295 % 6) 的模数是 (3)。

关于c++ - 模块化操作 (%) 提供错误输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62857523/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com