考慮此代碼:聲明在for循環的矢量運算
vector<double> student_grades(20);
for (vector<double>::size_type i = 0; i < student_grades.size(); i++)
{
cout << i << endl;
}
恰恰是有關聲明i
這種方式,而不是僅僅int i = 0
不同是什麼?
考慮此代碼:聲明在for循環的矢量運算
vector<double> student_grades(20);
for (vector<double>::size_type i = 0; i < student_grades.size(); i++)
{
cout << i << endl;
}
恰恰是有關聲明i
這種方式,而不是僅僅int i = 0
不同是什麼?
什麼是完全不同的聲明我這種方式,而不是隻是int i = 0?
它可以確保適當的類型使用 - 你是假設vector<T>::size_type
總是一樣int
,但這種假設是不正確的。根據具體實施情況,它也可能類似於unsigned int
,long
,unsigned long
或size_t
。
通過使用vector<T>::size_type
,您的代碼在不同的實現中保持可移植性。請參閱vector<int>::size_type in C++。
現在有道理。謝謝你,先生。 – Saraph 2013-03-13 11:15:52
vector<T>::size_type
是的static
的成員。我不知道爲什麼有人會使用它,因爲我猜可能會導致混淆。看看here這個他已經在SO上回答了。
你正在提議**不要**使用它?這與你的鏈接問題的答案是不是相反? – 2013-03-13 11:17:21
我相信這是令人困惑的,無法理解它。但爲了進一步參考,我提供了鏈接。 – 2013-03-13 11:18:41
size_type是類型向量的(靜態)成員類型。通常, 它是std :: size_t的typedef,它本身通常是用於 unsigned int或unsigned long long的typedef。
標準集裝箱限定SIZE_TYPE作爲一個typedef到 分配器:: size_type的(分配器是模板參數),這對於 的std ::分配器被定義爲size_t型。
size_type
是向量類,這給vector
類的機會來決定使用什麼類型的索引裏面的typedef。 int
具有2^31的最大值(通常但不是保證 - 我認爲它至少保證爲32767)。由於有時候我們想要的矢量大於20億項[我承認並不經常這麼做,我懷疑],這對類型本身來說是很有用的。
這種類型保證覆蓋vector
實現本身可以應對的範圍。它不是太大[如果你選擇在32位系統上使用long long
,它會比你需要的大,並且不會太小。當然,如果你知道你只有10件物品,那可能沒有關係。
它也幾乎總是一個無符號類型。在某些情況下,這使得索引數組效率更高,這也有助於提高性能。
謝謝,相當不錯的解釋。 – Saraph 2013-03-13 11:22:32
想想如果你有超過20億的學生需要處理會發生什麼。 – 2013-03-13 11:10:17
這是原因:http:// stackoverflow。com/a/1181629/1663919 – 2013-03-13 11:11:03
其他人給出的鏈接顯示它可以是一個無符號的整數,但也是一個長整數。差異不是由於矢量的大小。 – QuentinUK 2013-03-13 11:14:35