6

我想知道您是否可以使用 emplace_back 将项目存储到向量中,emplace_back 是从向量期望的类派生的类型。

例如:

struct fruit
{
    std::string name;
    std::string color;
};

struct apple : fruit
{
    apple() : fruit("Apple", "Red") { }
};

别的地方:

std::vector<fruit> fruits;

我想在向量中存储一个苹果类型的对象。这可能吗?

4

2 回答 2

11

不可以。向量只存储固定类型的元素。你想要一个指向对象的指针:

#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-20T01:30:55.340 回答
2

std::vector<fruit> fruits; 它仅将水果存储在非派生类型的水果中,因为分配器仅为sizeof(fruit)每个元素分配。为了保持多态性,您需要将指针存储在水果中。

std::vector<std::unique_ptr<fruit>> fruits;
fruits.emplace_back(new apple);

苹果是在免费存储上动态分配的,当元素从向量中删除时将被释放。

fruits.erase(fruits.begin());
于 2013-01-20T01:33:00.500 回答