Re: Алгоритмы возвращающие наборы, или...
От: XuMuK Россия  
Дата: 07.06.18 08:38
Оценка:
Здравствуйте, Мёртвый Даун, Вы писали:

МД>Вопрос сугубо практический...


МД>
МД>// всё это в каком то контейнере, для простоты пусть std::vector<A*>.
МД>std::vector<A*> vecA; // здесь данные всегда живы, не удаляются, не изменяются...
МД>


МД>Хочется функцию, которая будет обращаться к этому контейнеру, и на основании значений возвращаемых геттерами объектов класса B, чтото возвращала. Но что? Набор? Новый std::vector? Range?

МД>Посмотрел в сторону алгоритмов возвращающие наборы, типа std::copy_if.

МД>И так делаем часто, выборку из контейнера по каким то условиям на основании значений геттеров.

МД>Кажется както не эффективно, особенно постоянное копирование.

Копирование вектора указателей в другой вектор по идее очень дешевая операция, так что я бы для начала проверил, что оно реально влияет на производительность. Ещё неплохо бы знать сценарии использования возращаемых выборок.
Т.к. контейнер всегда живой и не меняется, можно возврщать прокси-обертку, с итераторным интерфейсом, например такую:

struct Selection {
  Selection(std::vector<A*>&, std::function<bool(A*)> predicate);
  std::vector<A*>::iterator begin() const;
  std::vector<A*>::iterator end() const;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.