我想知道您是否可以使用emplace_back将项目存储到向量中,这是一种从向量期望的类派生的类型。
例如:
struct fruit
{
std::string name;
std::string color;
};
struct apple : fruit
{
apple() : fruit("Apple", "Red") { }
};其他地方:
std::vector<fruit> fruits;我想在向量中存储一个苹果类型的对象。这个是可能的吗?
发布于 2013-01-20 09:30:55
不是的。向量只存储固定类型的元素。你想要一个指向对象的指针:
#include <memory>
#include <vector>
typedef std::vector<std::unique_ptr<fruit>> fruit_vector;
fruit_vector fruits;
fruits.emplace_back(new apple);
fruits.emplace_back(new lemon);
fruits.emplace_back(new berry);发布于 2013-01-20 09:33:01
std::vector<fruit> fruits;它只存储水果中的水果,而不是派生类型,因为分配器只为每个元素分配sizeof(fruit)。为了保持多态性,你需要在水果中存储指针。
std::vector<std::unique_ptr<fruit>> fruits;
fruits.emplace_back(new apple);苹果是动态分配的免费商店,将释放时,元素是从矢量中删除。
fruits.erase(fruits.begin());https://stackoverflow.com/questions/14420826
复制相似问题