Я делаю программу, которая имеет объекты другого типа, и все они являются детьми виртуального класса. Я делаю это в поисках преимуществ полиморфизма, которые позволяют мне вызывать из класса менеджера определенный метод для всех объектов без проверки конкретного типа объекта.
Дело в том, что объектам разного типа иногда нужно получить список объектов определенного типа.
В тот момент мой цикл класса менеджера продумал все объекты и проверил тип объекта. Он создает список и возвращает его так:
std::list<std::shared_ptr<Object>> ObjectManager::GetObjectsOfType(std::string type)
{
std::list<std::shared_ptr<Object>> objectsOfType;
for (int i = 0; i < m_objects.size(); ++i)
{
if (m_objects[i]->GetType() == type)
{
objectsOfType.push_back(m_objects[i]);
}
}
return objectsOfType;
}
m_objects это deque. Я знаю, что повторение структуры данных стоит обычно дорого, но я хочу знать, возможно ли немного ее отшлифовать, потому что теперь эта функция занимает треть всего времени, используемого в программе.
У меня такой вопрос: Существует ли какая-либо схема проектирования или функция, которую я не принимаю во внимание, чтобы снизить стоимость этой операции в моей программе?