假设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
答案 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的原因。