我被告知使用operator[]
是錯誤的。運算符[] - 爲什麼我不應該使用它?
之間有什麼區別:
vector<double> * IDs;
...
IDs->operator[](j) = 1;
和:
vector<double> * IDs;
...
(*IDs)[j] = 1;
我被告知使用operator[]
是錯誤的。運算符[] - 爲什麼我不應該使用它?
之間有什麼區別:
vector<double> * IDs;
...
IDs->operator[](j) = 1;
和:
vector<double> * IDs;
...
(*IDs)[j] = 1;
什麼都沒有,他們是等價的。雖然
1)
兩件事情IDs->operator[](j)
比(*IDs)[j]
不太清楚。
2)如果您可以使用const vector<double>& IDs
來代替,那麼您不僅可以從更清晰的IDs[j]
中受益,還可以通過使用IDs
無法修改矢量來獲得穩定性。
請記住,有一天你的代碼將由比你更不能幹的人維護,因此清晰度很重要。
'const'並不意味着「不變性」。不是ID,也不是矢量。 –
有意詳細說明R. Martinho Fernandes?我喜歡這樣的事實,如果你的對象被標記爲const,你不能在std :: vector上調用非const成員函數。 – Bathsheba
http://coliru.stacked-crooked.com/view?id=93ceeeae2034b6099a70639b71cebab1-50d9cfc8a1d350e7409e81e87c2653ba –
使用此運算符的整個想法是,您的對象可以使用[]以某種方式隱藏真實數據結構或數據組織內部,但在外部提供類似數組的接口。
例如,向量和deques都是以不同的方式實現的,並且針對不同的目的具有更好的性能,但在外部,它們都提供了[],以便用戶感覺他正在使用動態數組。
所以,這並沒有錯,但它打敗了目的。
它們是等價的。 – chris
嗯,這是更多的寫... :) –