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 に答える