@diod

Как работает std::vector((NL + NE) * (NL + NE), -1.0).swap(cache)?

Разбираю работу одного исходника и там следующая строка мне не понятна
std::vector((NL + NE) * (NL + NE), -1.0).swap(cache);
cache определён как std::vector cache;
Подскажите пожалуйста, что делает строка со swap.
Как переписать на чистом c, чтоб понять алгоритм и упростить?
  • Вопрос задан
  • 83 просмотра
Решения вопроса 1
@MarkusD Куратор тега C++
все время мелю чепуху :)
Функция swap() делает размен состояния между двумя контейнерами.
В этой строке у тебя сперва создается вектор из N элементов равных -1, а потом его состояние разменивается с состоянием cache. При размене не происходит дополнительных выделений памяти, состояния векторов в буквальном смысле меняются местами.
Далее исполнение выходит за область видимости временного контейнера, что приводит к его удалению. У нас на руках остается нужный нам cache с набором из -1.

Подозреваю, что это сброс кеша, перевод его состояния к изначальному виду.

Тут справка по вектору.
Там описан весь интерфейс вектора.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@diod Автор вопроса
Понятно, что надо такое переписать, ибо тормоза.
Уточнил у автора и он говорит "уж не помню почему именно swap" :-)
То есть создаётся массив с указанным размером, всем его элементам устанавливается -1.0, копируется в массив cache и - лишняя работа - копируется содержимое cache в временный массив и забывается за ненужностью.
Автор, похоже, позабыл, что выделение памяти - это дорого, хоть и проще писать одной строчкой.
Пример отсюда https://github.com/githole/simple-bidirectional-pa...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы