[英]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.