const_reference или итератор для карты (когда фактически не итерируется) - PullRequest
0 голосов
/ 22 августа 2010

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

Мне показалось, что было бы более целесообразно использовать unordered_map::const_reference для элемента, если я на самом деле не выполняю итерации. Это правда? Единственное, что мешает мне использовать const_references, это то, что из моих быстрых поисков в Google они, кажется, очень не используются населением или, по крайней мере, мало обсуждаются.

1 Ответ

1 голос
/ 22 августа 2010

Корректность констант является одним из ключей к программированию на C ++.
Написание программы и добавление константной корректности после того, как факт очень трудный (поскольку он распространяется касательно кода), вам нужно сделать это заранее.

Как таковой, вы должны предпочесть использовать const_iterators вместо итераторов.Но, как и все остальное, это вызов по решению.

Лично: если я не собираюсь изменять какие-либо элементы в контейнере, я бы использовал const_iterators, но если есть возможность вызова неконстантного метода для объектатогда вам нужно просто использовать итератор.

...