Каков правильный / рекомендуемый способ получения итератора std ::vector теперь, когда std::vector::iterator является устаревшим?

#c #c -standard-library

#c #c -standard-library

Вопрос:

Из cppreference:

 iterator    LegacyRandomAccessIterator
const_iterator  Constant LegacyRandomAccessIterator
 

Он больше не должен использоваться?
Каков правильный / рекомендуемый способ получения a std::vector iterator ? Должны ли мы использовать only auto ?

Комментарии:

1. Наследие не означает то, что вы думаете, что это значит. Откуда вы взяли предположение, что это подразумевает что-то среди строк устаревания?

2. @Fureeish «Устаревший означает, что он будет удален в ближайшем будущем, а устаревший означает, что он останется для обратной совместимости или по другим причинам. Оба означают, что они не должны использоваться новым кодом. » Первый результат поиска в Google ответа SO. Этот вопрос был связан с Java.

3. В стандартах уже указано множество реализаций . Это не значит, что вы не можете безопасно использовать их в своем коде на c .

4. В этом и заключается ваше замешательство — вы читаете ответ для Java, а не для C . Речь также шла об API, а не о самом названии концепции (не обязательно <concepts> связанной). LegacyIterator — это имя . Я не знаю, почему он так назван, но это просто имя.

5. Кстати, помимо предположения о путанице, сделанного OP, я думаю, что это хороший вопрос. Безусловно, есть причины для присвоения имен (уже упомянутые в ответе), и я думаю, вполне вероятно, что люди могут запутаться в таком присвоении имен, тем более что нет простого объяснения.

Ответ №1:

Высказывание legacy не означает, что оно не поддерживается или устарело. Это просто означает, что он не новый, следовательно, использует термин legacy . Legacy префикс используется только для различения между C 20 RandomAccessIterator и ранее существовавшими LegacyRandomAccessIterator (оба являются «концепциями» в соответствии с C ). Я не думаю, что этот термин Legacy действительно упоминается в стандарте.

Комментарии:

1. Термин «Устаревший» не появляется в стандарте. Это изобретение cppreference.com . Я думаю, что менее запутанным термином был бы «Классический». В классике нет ничего плохого. Но они также не современные.

2. Да, вы правы, я немного покопался, и я полагаю, что операторы сайта сделали это, чтобы разделить страницы wiki, я, возможно, ошибаюсь.