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



假设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

如果你的意思是,对insert进行一次调用,那么no-可以复制一个范围,在需要时执行类型转换,但不能应用任意转换,比如获取每个元素的地址。

您可以使用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);
}

是的,您也可以使用insert。但这两种操作之间几乎没有什么区别:-

pushback将一个新元素放在矢量的末尾,insert允许您选择位置。这会影响性能。insert强制将所有图元移动到新图元的选定位置之后。你只需要为它留出一个位置。这就是为什么插入的效率通常不如push_back。

最新更新