Получить индекс элемента в контейнере, если элемент существует - PullRequest
0 голосов
/ 06 апреля 2020

Я улучшаю свои навыки C ++, учась лучше использовать алгоритмы в стандартной библиотеке. У меня есть проблема, которую я не уверен, как правильно решить, используя algorirhtms. Мне нужно проверить, существует ли элемент в векторе и, если он существует, получить его индекс.

С необработанным l oop я бы использовал целое число и увеличивал его для каждой итерации.

С алгоритмами, которые я смог использовать только std::find, а затем использовал std::distance, но для этого требуется больше вычислений, чем для необработанного l oop. Как лучше всего выполнить эту задачу, используя алгоритмы?

1 Ответ

1 голос
/ 06 апреля 2020

Как лучше всего выполнить эту задачу с использованием алгоритмов?

Использовать std::find, а затем использовать std::distance.

За исключением контейнеров с более эффективная find функция-член, такая как ассоциативные контейнеры. В этом случае используйте find функцию-член и std::distance.

. Существуют также структуры данных с более эффективными способами вычисления расстояния, чем это может быть достигнуто с помощью итераторов, но ни один стандартный контейнер не использует такую ​​структуру данных.

но для этого требуется больше вычислений, чем для необработанного l oop.

Нет (при условии оптимизирующего компилятора).

почему нет?

Поскольку стандартные алгоритмы, о которых идет речь, не должны ничего делать, чего не делает необработанный l oop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...