Здравствуйте, Мёртвый Даун, Вы писали:
МД>Вопрос сугубо практический...
МД>МД>// всё это в каком то контейнере, для простоты пусть 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;
}