繁体   English   中英

如何使用C ++ 11的基于范围的for循环在表中输出数据?

[英]How can I use C++11's range-based for loop to output data in a table?

这是我的代码:

#include <iostream>
#include <iomanip>
#include <array>
using namespace std;

int main()
{
    // array< int, 5 > n;
    int n [ 5 ] = { 2, 4, 6, 8, 10};

    cout << "Element" << setw(13) << "Value" << endl;

    for ( int j : n )
    {
        cout << setw(7) << j << setw(13) << n[ j ] << endl;
    }
}

它产生了以下输出:

Element        Value
      2            6
      4           10
      6  -1078585116
      8  -1217581056
     10            0

虽然我期望这个输出:

Element        Value
      1            2
      2            4
      3            6
      4            8
      5           10

我尝试过更改一些小东西,但是它们没有用。 我在哪里做错了?

如果需要索引时,最好使用普通循环而不是基于范围的for循环。 例如

int main()
{
    // array< int, 5 > n;
    int n [ 5 ] = { 2, 4, 6, 8, 10};

    cout << "Element" << setw(13) << "Value" << endl;

    for ( size_t i = 0; i < sizeof( n ) / sizeof( *n ); i++ )
    {
        cout << setw(7) << i + 1 << setw(13) << n[ i ] << endl;
    }
}

如果要使用基于范围的for循环,则需要在循环之前声明一个辅助计数。 例如

int main()
{
    // array< int, 5 > n;
    int n [ 5 ] = { 2, 4, 6, 8, 10};

    cout << "Element" << setw(13) << "Value" << endl;

    size_t i = 0; 
    for ( int a : n )
    {
        cout << setw(7) << ++i << setw(13) << a << endl;
    }
}

至于您的代码,那么您将数组的元素用作其中的索引

for ( int j : n )
{
    cout << setw(7) << j << setw(13) << n[ j ] << endl;
                      ^^^                ^^^^^
                     element of n       using element of n as an index
}

您的数组没有6、8或10个元素。 因此,您正在读取不存在的元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM