Предположим, у меня есть этот класс:
class dog
{
public:
//dogstuff
private:
//secret dogstuff
};
а потом у меня есть функция, которая просматривает что-то не связанное и получает мне НЕИЗВЕСТНОЕ КОЛИЧЕСТВО ИМЕН СОБАКИ:
dogNamesVector = getListOfDogNames();
Таким образом, список имен собак может выглядеть примерно так: «Спайк, Спот, Джордж, Шэдоу и т. Д.».
Есть ли умный способ потом пойти:
dog DOGNAME()
и получить кучу dog
объекты, которые я могу назвать и использовать со списком имен собак?
Итак, допустим, у вас есть вектор собак:
vector<dog> dogs {...};
И мы будем предполагать, что в этом векторе уже есть собаки. Это будет означать, что у вас уже есть объекты типа dog, и для их вызова все, что вам нужно сделать, это использовать обозначение в скобках:
dogs[i];
Если вы хотите назначить эту собаку другому объекту, вы должны использовать:
dog spike = dogs[i];
Если бы вы хотели уникальное имя (ключ или идентификатор), вы бы включили его в сам класс следующим образом:
private:
string dog_name;
И чтобы получить к нему доступ, вы должны сделать функцию-член (или «метод»). Объедините любой из этих шагов с какой-либо формой цикла (подойдет любая форма итерации), и вы можете создать столько объектов собаки, сколько вам нужно, а также вы можете создать функцию для поиска по имени, если это то, что вам поможет.
Если у вас есть список строк, и ваш 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());
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(); });