在`for`循环中运行整个`unsigned char`范围

时间:2014-01-08 03:22:27

标签: c++ for-loop

我想在unsigned char循环中遍历for的整个范围。假设我想要打印0到255之间的所有数字,我该如何完成呢?

以下代码将是无限循环:

for (unsigned char i=0; i<=255; i++)
    cout << i << endl;

这个错过了0或255,具体取决于它是i++还是++i

for (unsigned char i=0; ++i<=255; i++)
    cout << i << endl;

我可以在for循环之前/之后放置一个cout以补偿丢失的条目,但我寻求更优雅的解决方案。

任何帮助将不胜感激! (whiledo-while循环也欢迎!)

3 个答案:

答案 0 :(得分:10)

尝试,

unsigned char i = 0 ;
do {
  cout << i << endl ;
}
while ( ++i ) ;

do .. while优于其他形式的好处是,在测试条件之前,您可以获得一次免费运行。在程序员的工具箱中,这是一个重要的工具(如果不经常使用)。

答案 1 :(得分:0)

你可以分手:

for (unsigned char i = 0; i < 16; ++i)
{
    unsigned char base=i*16;
    for (unsigned char j = 0; j < 16; ++j)
    {
        unsigned char val=base+j;
        std::cout << val << std::endl;
    }
}

答案 2 :(得分:0)

使用boost::irange可以被认为是优雅的( live example ):

#include <boost/range/irange.hpp>
#include <iostream>

int main()
{
    for(auto i : boost::irange(0, 256) )
        std::cout << i << "\n";
    return 0;
}