在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);
}