我可以使用insert函数将值插入指针向量中吗?

时间:2014-11-07 17:47:13

标签: c++ vector

假设Foo是任何类。

Foo f[5];

std::vector<Foo*> v;

我可以使用for循环语句将元素插入指针向量:

for (size_t i = 0; i < 5; i++)
    v.push_back(&f[i]);

是否可以使用std::vector::insert()函数插入它们,为什么不呢?我曾多次尝试过这样的事情:

v.insert(v.end(), &f[0], &f[5]); // error

2 个答案:

答案 0 :(得分:1)

如果你的意思是,只需一次调用insert,然后没有 - 可以复制范围,在需要时执行类型转换,但不能应用任意转换,例如获取每个元素的地址。

您可以使用std::transform

std::transform(std::begin(f), std::end(f),
               std::back_inserter(v),
               [](Foo & f) {return &f;});

虽然这可能不如简单的循环清晰,特别是如果你使用新式语法

for (Foo & foo : f) {
    v.push_back(&foo);
}

答案 1 :(得分:0)

是的,你也可以使用插入。但这两项行动之间几乎没有差异: -

push_back在向量的末尾放置一个新元素,insert允许您选择位置。这会影响性能。插入力以在新元素的选定位置之后移动所有元素。你只需要为它做一个位置。这就是为什么insert可能效率低于push_back的原因。