我可以使用insert函数将值插入指针的向量中吗
Can I insert values into vector of pointers using insert function?
假设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。
相关文章:
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 如何更改唯一指针向量的可见性
- 如何在基类指针向量的元素上应用重载的多态函数
- C++:添加新结构时,结构指针向量中的所有元素都会更新
- 包含指向其他结构的指针向量的结构
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- 如何将字符串指针数组转换为字符串类型的智能指针向量?
- 初始化可变数据结构中的共享指针向量
- 指向具有 decltype 的函数的指针向量
- push_back指向指针向量的指针
- 使用指针向量(带代码)C++(以及对其使用的便利性的怀疑)时出现问题
- 我可以做些什么来改进指针向量中的此搜索?
- 指向指针排序向量的指针向量的 C++ 向量
- 初始化用户定义类的指针向量
- 函数无法识别我在C++传递节点指针向量?
- 如何声明指向类对象的指针向量?
- 指向结构的指针向量的元素具有相同的地址
- 删除指向抽象类的指针向量
- 当我返回指向结构的指针向量时出现段错误
- 用基于范围的for循环填充指针向量