C++如何为向量中的每个元素创建一个新对象?
In C++ how can I make a new object for every element in a vector?
假设我有这个类:
class dog
{
public:
//dogstuff
private:
//secret dogstuff
};
然后我有一个函数,可以搜索不相关的东西,并得到我未知数量的狗名:
dogNamesVector = getListOfDogNames();
因此,狗名列表可能是"Spike,Spot,George,Shadow等"。
有没有一个聪明的方法可以去:
dog DOGNAME()
并获取一堆我可以调用并与狗名列表一起使用的dog
对象?
所以,假设你有一个狗的向量:
vector<dog> dogs {...};
我们将假设这个载体中已经有狗。这意味着您已经拥有 dog 类型的对象,要调用它们,您需要做的就是使用括号表示法:
dogs[i];
如果要将此狗分配给另一个对象,可以使用:
dog spike = dogs[i];
如果你想要一个唯一的名称(键或标识符),你可以把它包含在类本身中,如下所示:
private:
string dog_name;
要访问它,您将创建一个成员函数(或"方法")。将这些步骤中的任何一个与某种形式的循环(任何形式的迭代都可以)结合起来,您可以根据需要创建任意数量的 dog 对象,您还可以创建一个函数来按名称搜索,如果这对您有帮助的话。
如果你有一个字符串列表,并且你的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(); });
相关文章:
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 有没有一种方法可以从函数中返回一个新对象或对现有对象的引用
- 如何异步销毁对象并立即分配一个新对象
- 我可以制作一个对象方法,如果单独调用,它将自行修改,但如果在复制初始化期间调用,则会返回一个新对象?
- 我应该如何在这个房间中创建一个新对象 - opengl
- C++如何为向量中的每个元素创建一个新对象?
- 从指针参考C 创建一个新对象
- 我如何从数组中创建一个新对象,该数组在C 中保存不同的对象
- 从现有指针C 创建一个新对象
- 按值返回不会创建一个新对象
- 如何从NanAsyncWorker返回一个新对象
- 将现有对象传递给构造函数或构造一个新对象
- 每次创建一个新对象或保留一个对象
- 创建一个新对象并传入方法参数
- 我应该清除作为参数传入的()容器,还是交换一个新对象
- 用C++实例化一个新对象
- 是基元铸造,在内存中创建一个新对象
- 在cpp中实例化一个新对象
- 在头文件中分配一个新对象
- 在函数中创建一个新对象-C++