带有转发的矢量push_back
vector push_back with forwarding?
我在我的代码中做了这样的事情
S s;
s.a=1
s.b=2
v.push_back(s)
现在C++有了转发功能,我可以写一些类似的东西吗
v.push_back(1,2)
fyi visual studio支持转发,因为以下工作符合预期
//http://herbsutter.com/gotw/_102/
template<typename T, typename ...Args>
std::unique_ptr<T> make_unique( Args&& ...args )
{
return std::unique_ptr<T>( new T( std::forward<Args>(args)... ) );
}
您可以使用std::vector::emplace_back
,它将使用拟合构造函数就地创建对象。这当然需要定义这样一个构造函数。
v.emplace_back(1,2);
从C++11开始,每个std容器都提供了一个类似于模板的函数,该函数给出了上述行为。
兼容性说明:MSVC可能还不支持这一点,因为它只支持CTP中的可变模板,这不会影响标准库,而且gcc的libstd++仍然缺少关联容器中的模板成员函数。
push_back
不支持转发,但新的emplace_back
支持转发。
但是,push_back
确实支持初始值设定项列表:
v.push_back({1,2});
相关文章:
- 推导 std::vector::back() 的返回类型
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- vector.push_back(vector.back()+1) 是未定义的行为吗?
- C++自己的对象堆栈.在 push() 上复制了什么?
- C++ push() 和 pop() 方法使用指针的动态 LinkedList 的问题
- 如何像在javascript中一样"push" c ++映射
- 线路抑制状态错误 C4703 可能未初始化的局部指针变量"back"已使用
- std::vector using back(), pop_back(), push_back(), 得到'double free or corruption'错误
- vector.back()和vector.end()有什么区别
- 列表大小为 1,但 front() 和 back() 不相等
- 返回C++中没有 back() 方法的容器的最后一个元素?
- 在非空 std::list 上使用 std::list.back<int>() 时"Segmentation Fault"
- 模板堆栈类的复制构造函数中的 pop() 和 push() 不起作用
- 我们可以使用Back() - 值索引在其上执行向量插入
- 当我运行以下代码添加str.front() str.back时,它给了我200个,但为什么
- push(ing)back在循环中对象指针
- 在 C++ 中将元素添加到空向量:为什么 push.back 有效而 [] 无效
- 我似乎无法让 v.push.back() 处理字符串
- String::push_back() does not push back
- 向量resize(), push.back(), reserve()方法