[英]Double/Integer use and data narrowing within a Range-Based for loop
我正在通過Bjarne Stroustrup的編程原則和實踐工作,我遇到了困難。 我目前正在閱讀Vector,並已介紹到基於范圍的for循環。 下面我有一些代碼,從我的眼睛看,似乎正在閱讀一個雙重進入INT; 我認為這會導致縮小范圍。
int main()
{
vector<double> temps; // temperatures
for (double temp; cin >> temp; ) // read into temp
temps.push_back(temp); // put temp into vector
// compute mean temperature:
double sum = 0;
for (int x : temps) sum += x;
cout << "Average temperature: " << sum / temps.size() << '\n';
// compute median temperature:
sort(temps); // sort temperatures
cout << "Median temperature: " << temps[temps.size() / 2] << '\n';
keep_window_open();
return 0;
}
在嘗試了幾次不同的輸入后,我得出結論,這確實在縮小。 我正在創建一個雙精度矢量,而不是for(int x:temps)循環,將第一個元素放在temp中,將它放在x中,處理它而不是遞增到下一個元素並重復。 因為元素(雙精度)被讀入x(整數),導致變窄。
我的主要問題是,如果我確實是正確的,它正在縮小向量中的元素(可能它實際上沒有讀入x並且int x正在描述其他內容),我可以簡單地將(int x:temps)替換為for (double x:temps)以避免這種縮小,或者是在基於范圍的for循環參數中強制使用整數(可能是這樣設計的)。 有任何想法,謝謝。
for
循環變量(它的任何版本)。 floor
操作)。 請看一下 C ++的轉換規則:
如果轉換是從浮點類型轉換為整數類型,則會截斷該值(刪除小數部分)。 如果結果位於類型的可表示值范圍之外,則轉換會導致未定義的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.