2013-07-12 95 views
2

vector.at(i)vector[i]有什麼區別?C++ STL訪問向量元素

vector<int> myVector(6); 
myVector.at(5) = 5; 

OR

myVector[5] = 5; 

我知道,這兩個產生相同的結果,但不知何故操作[]更快。我還讀了at檢查矢量大小(邊界)並返回出界錯誤,而[]沒有。

但是我看到,如果嘗試分配:

myVector[8] = 1; 

我得到一個類似超出範圍錯誤的調試模式。

那麼at是什麼意思?爲什麼在STL中?

+1

可能是在調試模式下,特定的矢量實現甚至對'[]'運算符也有範圍檢查。你真的必須檢查你正在使用的庫的文檔。 –

+1

任何參考資料都應該告訴你。如果您不相信有效性,請查看標準。 – chris

回答

5

operator []對於std::vector將返回對存儲器區域的引用,無論它是否被分配給向量。訪問未分配的內存區域是未定義行爲,而at將在發生任何這種情況之前引發異常。正如@JoachimPileborg在評論中所說,operator []的未指定行爲包括拋出異常。

+0

爲了補充說明,*未指定的行爲* **包括**拋出異常。 –

+0

謝謝,所以在()處連接了一個特定的異常。我想我有我的平臺支持容器「vector」的調試實現。我在整個過程中進行調試,並在開發過程中查看錯誤原因。在分配之前,它也綁定檢查運算符「[]」。其實,是不是很多平臺已經這樣做?爲什麼即使有人選擇「at」,記住它的運行速度較慢? – baci

+1

@C.CanberkBacı,因爲即使在發佈模式下,如果超出範圍,它也能保證會拋出異常。根據你的程序是什麼樣,這可能是好的或壞的。 – chris