我被告知使用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
。
请记住,有一天您的代码将由能力不如您的人维护,因此清晰很重要。
使用此运算符的整个想法是,您的对象可以使用 [] 以某种方式在其内部隐藏真实的数据结构或数据组织,但在外部提供类似数组的接口。
例如,vector 和 deques 的实现完全不同,并且针对不同的目的具有更好的性能,但在外部,它们都提供 [] 以便用户感觉他正在使用动态数组。
所以,这并没有错,但它违背了目的。