класс — В C ++, как я могу сделать новый объект для каждого элемента в векторе?

Предположим, у меня есть этот класс:

class dog
{
public:
//dogstuff
private:
//secret dogstuff
};

а потом у меня есть функция, которая просматривает что-то не связанное и получает мне НЕИЗВЕСТНОЕ КОЛИЧЕСТВО ИМЕН СОБАКИ:

dogNamesVector = getListOfDogNames();

Таким образом, список имен собак может выглядеть примерно так: «Спайк, Спот, Джордж, Шэдоу и т. Д.».

Есть ли умный способ потом пойти:

dog DOGNAME()

и получить кучу dog объекты, которые я могу назвать и использовать со списком имен собак?

0

Решение

Итак, допустим, у вас есть вектор собак:

    vector<dog> dogs {...};

И мы будем предполагать, что в этом векторе уже есть собаки. Это будет означать, что у вас уже есть объекты типа dog, и для их вызова все, что вам нужно сделать, это использовать обозначение в скобках:

    dogs[i];

Если вы хотите назначить эту собаку другому объекту, вы должны использовать:

    dog spike = dogs[i];

Если бы вы хотели уникальное имя (ключ или идентификатор), вы бы включили его в сам класс следующим образом:

    private:
string dog_name;

И чтобы получить к нему доступ, вы должны сделать функцию-член (или «метод»). Объедините любой из этих шагов с какой-либо формой цикла (подойдет любая форма итерации), и вы можете создать столько объектов собаки, сколько вам нужно, а также вы можете создать функцию для поиска по имени, если это то, что вам поможет.

0

Другие решения

Если у вас есть список строк, и ваш dog класс может быть построен со строкой в ​​качестве входных данных, вы можете построить вектор dog объекты, использующие итераторы для списка строк, например:

class dog
{
public:
dog(const std::string name) : m_name(name) {}
private:
std::string m_name;
};

std::vector<std::string> dogNames = getListOfDogNames();

std::vector<dog> dogs(dogNames.begin(), dogNames.end());

демонстрация

0

std::vector<dog> dogs = get_dogs();
std::vector<std::string> dog_names;

dog_names.reserve(dogs.size());

std::transform(std::begin(dogs), std::end(dogs), std::back_inserter(dog_names), [](auto const& dog) { return dog.name(); });
-1
По вопросам рекламы [email protected]