我被告知使用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
嗯,这是更多的写... :) –