我有五个整数值
std::vector<int> vec(5, 0);
每个int的值将基于一个计数器。
如果counter为0,则所有int为0
如果计数器为100,则所有int的值为20
因此,当计数器为20时,第一个int的值为20,其余为0。
当计数器为30时,第一个int为20,第二个int为10
这是我的代码,我很想看看其他实现此目的的逻辑,
std::vector<int> vec(5, 0);
int counter = 50;
for (int i = 0; i < 5; i++)
{
int startValue = (i) * 20;
int finalValue = counter - startValue;
if (finalValue > 20)
finalValue = 20;
if (finalValue < 0)
finalValue = 0;
vec[i] = finalValue;
}
for (auto &v : vec)
{
std::cout << v << std::endl;
}
最佳答案
我没有测试过,但是如果您正在寻找“聪明”的东西,请尝试以下操作:
int counter = 30;
for( int i = 0; i < 5; i++ ) {
if( counter <= 20 * i ) {
vec[i] = 0;
} else {
vec[i] = (counter > 20 * (1 + i)) ? 20 : counter % 20; // how I think, or
vec[i] = (counter - (20 * i) > 20) ? 20 : counter - 20 * i; // how you do it
}
}
您可能可以对循环进行微优化,以用加法替换第二个乘法,但是您不可能比使用其循环展开选项的编译器更好地进行优化。
我不是StackOverflow的狂热用户(但是),但这个问题似乎最好将其发布在Code Review上(基于this answer on Meta)
关于c++ - 如何根据计数器缩放值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61537013/