博客
关于我
关于stl vector的emplace_back函数参数
阅读量:388 次
发布时间:2019-03-05

本文共 1663 字,大约阅读时间需要 5 分钟。

C++向量中的自定义对象处理方法比较

在C++中处理向量中的自定义对象时,可以选择多种方法来实现元素的压入操作。以下是几种常见方法的对比分析。

方法一:直接压入元素值

这种方法适用于向量中存储基本数据类型或其他内置对象。通过向向量的push_back()函数直接压入对象或值,可以快速实现元素的添加操作。

#include 
#include
using namespace std;int main() { vector
ps; ps.push_back(1); ps.push_back(2); return 0;}

在这种方法中,向量中的每个元素都直接通过push_back()函数进行压入操作。这种方法简单直接,且对向量容器的操作方式非常友好。


方法二:定义对象后压入

当需要处理自定义对象时,可以先定义对象实例,然后再将其压入向量中。这种方法与直接压入参数列表的方式效果一致,但操作步骤稍有不同。

#include 
#include
using namespace std;struct P { P(int x, int y, int z) { a[0] = x; a[1] = y; a[2] = z; }; vector
a; P(int x, int y, int z) : a(3) { a[0] = x; a[1] = y; a[2] = z; };};int main() { vector
ps; ps.push_back(P(1, 1, 1)); ps.push_back(P(1, 2, 3)); cout << "向量中对象数量:" << ps.size() << endl; return 0;}

在这种方法中,自定义对象的构造函数负责初始化成员变量,向量则通过push_back()函数将对象实例添加到容器中。这种方式适用于需要初始化较多成员变量的对象。


方法三:直接压入参数列表

对于内置对象或基本数据类型,可以直接通过向量的构造函数来压入参数列表。这种方法与push_back()函数的使用效果相同,但操作方式略有不同。

#include 
#include
using namespace std;int main() { vector
ps; ps.emplace_back(1, 1, 1); ps.emplace_back(1, 2, 3); cout << "向量中对象数量:" << ps.size() << endl; return 0;}

在这种方法中,emplace_back()函数会直接构造对象并将其添加到向量中。这种方式在性能上可能优于push_back(),因为它避免了中间对象的创建和析构。


注意事项

需要注意的是,emplace_back()函数不能用于自定义对象的直接压入,因为它需要提供足够的构造函数参数。对于自定义对象,建议使用push_back()函数来确保对象的正确构造和初始化。


总结

在实际开发中,可以根据具体需求选择合适的压入方法:

  • 如果需要处理内置对象或基本数据类型,可以直接使用push_back()emplace_back()函数。
  • 如果需要处理自定义对象,建议使用push_back()函数,并确保对象的构造函数能够正确初始化成员变量。
  • 总体而言,push_back()函数的使用更为通用和稳定,尤其是在处理复杂自定义对象时。
  • 转载地址:http://myfwz.baihongyu.com/

    你可能感兴趣的文章
    OSPF技术连载10:OSPF 缺省路由
    查看>>
    OSPF技术连载11:OSPF 8种 LSA 类型,6000字总结!
    查看>>
    OSPF技术连载13:OSPF Hello 间隔和 Dead 间隔
    查看>>
    OSPF技术连载14:OSPF路由器唯一标识符——Router ID
    查看>>
    OSPF技术连载15:OSPF 数据包的类型、格式和邻居发现的过程
    查看>>
    OSPF技术连载16:DR和BDR选举机制,一篇文章搞定!
    查看>>
    OSPF技术连载17:优化OSPF网络性能利器——被动接口!
    查看>>
    OSPF技术连载18:OSPF网络类型:非广播、广播、点对多点、点对多点非广播、点对点
    查看>>
    OSPF技术连载19:深入解析OSPF特殊区域
    查看>>
    SQL Server 复制 订阅与发布
    查看>>
    OSPF技术连载20:OSPF 十大LSA类型,太详细了!
    查看>>
    OSPF技术连载21:OSPF虚链路,现代网络逻辑连接的利器!
    查看>>
    OSPF技术连载22:OSPF 路径选择 O > O IA > N1 > E1 > N2 > E2
    查看>>
    OSPF技术连载2:OSPF工作原理、建立邻接关系、路由计算
    查看>>
    OSPF技术连载5:OSPF 基本配置,含思科、华为、Junifer三厂商配置
    查看>>
    OSPF技术连载6:OSPF 多区域,近7000字,非常详细!
    查看>>
    OSPF技术连载7:什么是OSPF带宽?OSPF带宽参考值多少?
    查看>>
    OSPF技术连载8:OSPF认证:明文认证、MD5认证和SHA-HMAC验证
    查看>>
    OSPF故障排除技巧
    查看>>
    spring配置文件中<context:property-placeholder />的使用
    查看>>