0

我想在打印出某些索引 [0]、v[2]、v[6]、v[14] 后打印一个新行。增量 2^(n+1)

for (int i = 0; i < v2.size(); i++)
{   
    std::cout << v2[i] << " ";
    // need to print a new line after done printing v[0], v[2], v[6], v[14] 
}

我尝试了硬编码if(i== 0 || i == 2 || i == 4 || .. || i == 30),但似乎效率不高。有什么建议么?

4

3 回答 3

2

尝试这个。

    if ((i & (i+1)) == 0) // print newline if i+1 is a power of two
于 2013-03-19T19:45:49.973 回答
0

作为起点,试试这个:

unsigned uNext = 0, power = 0;
for (unsigned i = 0; i < v2.size(); ++i) {
  cout << v2[i] << (i == uNext) ? endl : " ");
  uNext = (uNext == i) ? uNext + pow(2, ++power): uNext;
}

你必须检查你没有溢出未签名的 uNext 所以添加一些检查。

于 2013-03-19T19:49:13.977 回答
0

假设 Roddy 是对的,实际上,您希望每行的长度增加到 2 的下一次幂,使用标准习语的变体很容易解决这个问题:

int maxInLineCount = 2;
int inLineCount = 0;
for ( auto current = v.begin(); current != v.end(); ++ current ) {
    if ( inLineCount != 0 ) {
        std::cout << ' ';
    }
    std::cout << *current;
    ++ inLineCount;
    if ( inLineCount >= maxInLineCount ) {
        std::cout << '\n';
        inLineCount = 0;
        maxInLineCount *= 2;    //  This is the added bit.
    }
}
if ( inLineCount != 0 ) {
    std::cout << '\n';
}
于 2013-03-19T19:59:22.213 回答