在C++中将“循环”索引转换为实数索引的最简洁/最有效的函数是什么?

下图可以说明我的问题:

我有一个包含元素(此处为size)的大小为A, B, C, D, E的真实列表(例如,C++ vector )。为了模仿“循环”列表,我正在寻找一个函数来将输入索引(从-inf转换为+inf)转换为列表的真实索引。使用此功能和图像示例代码:

for(i=-10; i < 10; ++i) std::cout<<list[myFunction(i, list.size())]<<" ";

将打印图像中显示的列表的4倍。

我当前的myFunction表达式是:
inline int myFunction(const int i, const int size)
{
    return (i >= 0) ? (i%size) : ((size-((-i)%size))%size);
}

您是否认为有更简单/简洁/有效的方式编写此代码?

最佳答案

有两种更简洁的表示方式。两者都涉及一个事实,如果i < 0(i % size) + size是您要查找的数字。因此,您可以使用

inline int myFunction(const int i, const int size)
{
    int index = i % size;
    return (index<0) ? (index+size) : index;
}

要么
inline int myFunction(const int i, const int size)
{
    return (((i%size)+size)%size);
}

10-06 12:42
查看更多