簡體   English   中英

C ++向后打印數組的內容一位不正確的數字

[英]C++ Printing Contents of array backwards One incorrect digit

作為程序的一部分,我試圖以相反的順序打印數組的內容。 除了一個值,它工作正常,我不知道為什么。

我還沒有接觸到函數,所以我沒有在代碼中使用它們,這里是代碼段

case 7:
    for (int i = 11; i != -1; i--)// The variable i is initialised to 11. While i is not equal to -1 decrement i by 1.
    {
        infile >> list[i];//Read in values for array from data.dat
        cout << list[i] << " ";// Outputting the array in reverse order.
        outfile << "The array in reverse order is: " << list[i] << " " << endl;// Outputting the array in reverse order to file.

    }
    cout << endl;
    break;

數組由以下數字填充

8 16 12 6 16 4 8 10 2 16 12 6

預期的輸出是:

6 12 16 2 10 8 4 16 6 12 16 8

我得到的輸出是:

6 12 16 2 10 8 4 16 6 12 6 8

任何幫助表示贊賞

反轉迭代器的正確方法是將迭代器向下移動一個。

向前:

T a[N];

for (std::size_t i = 0; i != N; ++i)
{
    consume(a[i]);
}

向后:

T a[N];

for (std::size_t i = 0; i != N; ++i)
{
    std::size_t const ri = N - i - 1;
    //                           ^^^

    consume(a[ri]);
}

可以編寫一個實際上直接遞減循環變量的循環,但是這樣做很尷尬,因為您必須使用帶符號的整數或以其他方式額外使用- 1在使用索引時為- 1 ,而且這完全不自然,難以閱讀且容易出錯。 我寧願建議始終使用此處所示的前向循環並分別計算反向迭代器。

順便說一句,此邏輯已經封裝在迭代器包裝器std::reverse_iterator ,該包裝器是從正常的雙向移動迭代器構建的,但在取消引用時遞減1。 您可以使用make_reverse_iterator自己反轉序列,也可以使用免費的rbegin / rend函數反轉序列:

#include <iterator>

T a[N];

for (auto rit = std::crbegin(a); rit != std::crend(a); ++rit)
{
    consume(*rit);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM