Мне сказали, что использование 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' не означает« неизменность ». Не из идентификаторов, а не из вектора. –
Ухаживать за Р. Мартиньо Фернандесом? Мне нравится, что вы не можете вызывать не-const-функции-члены на std :: vector, если ваш объект помечен как const. – Bathsheba
http://coliru.stacked-crooked.com/view?id=93ceeeae2034b6099a70639b71cebab1-50d9cfc8a1d350e7409e81e87c2653ba –
Вся идея использования этого оператора заключается в том, что ваш объект может использовать [] каким-то образом, который скрывает реальную структуру данных или организацию данных внутри себя, но снаружи, предоставляет интерфейс, подобный массиву.
См., Например, оба вектора и deques реализованы совершенно по-разному и имеют лучшие характеристики для разных целей, но снаружи они оба обеспечивают [], так что пользователь чувствует, что использует динамический массив.
Итак, это не так, но это побеждает цель.
Они эквивалентны. – chris
Ну, больше писать ... :) –