我被告知使用operator[]
是错误的。
有什么区别:
vector<double> * IDs;
...
IDs->operator[](j) = 1;
和
vector<double> * IDs;
...
(*IDs)[j] = 1;
答案 0 :(得分:2)
什么都没有,它们是等价的。
但有两件事
1)IDs->operator[](j)
不如(*IDs)[j]
明确。
2)如果您可以使用const vector<double>& IDs
,那么您不仅可以从更清晰的IDs[j]
中受益,而且还可以通过使用IDs
无法修改向量来获得稳定性
请记住,有一天,您的代码将由能力较差的人维护,因此清晰度非常重要。
答案 1 :(得分:0)
使用此运算符的整个想法是,您的对象可以以某种方式使用[]隐藏真实的数据结构或数据组织,但在外部,提供类似于数组的接口。
例如矢量和deques的实现方式完全不同,并且具有更好的性能以用于不同的目的,但在外部,它们都提供[],以便用户感觉他使用的是动态数组。
所以,它并没有错,但它失败了。