C++ 的 emplace_back 和 push_back(含相应的 C++ 代码)

news/2024/10/31 5:35:31/

在 C++ 中,emplace_backpush_back 都是向容器中添加元素的方法,但它们的实现方式和使用场景略有不同。

  1. emplace_back

emplace_back 是 C++11 标准中引入的一个方法,用于向容器中添加一个元素,它与 push_back 类似,但在使用上具有更高的效率。emplace_back 不需要创建一个元素副本再插入容器,而是在容器中直接构造新元素。

以下是使用 emplace_back 方法向 vector 容器中添加元素的示例代码:

#include <iostream>
#include <vector>struct Student
{std::string name;int age;float score;
};int main()
{std::vector<Student> students;// 向 vector 容器中添加一个新元素students.emplace_back("John", 22, 95.0f);// 输出容器中的元素for (auto& s : students){std::cout << s.name << ", " << s.age << ", " << s.score << std::endl;}return 0;
}

上面的代码中,我们创建了一个 struct 类型的 Student,然后使用 emplace_back 方法向 vector 容器中添加了一个新的 Student 对象。由于 emplace_back 方法会直接在容器中构造新元素,因此它可以避免在添加元素时的额外开销,从而提高代码的执行效率。

  1. push_back

push_back 也是向容器中添加元素的方法,它是 C++ 标准库中众多容器中的一个成员函数。push_back 方法的作用是将一个元素添加到容器的尾部。相比于 emplace_backpush_back 的使用要简单直接一些,但是它需要先创建一个元素副本再将其添加到容器中。

以下是使用 push_back 方法向 vector 容器中添加元素的示例代码:

#include <iostream>
#include <vector>struct Student
{std::string name;int age;float score;
};int main()
{std::vector<Student> students;Student s{"John", 22, 95.0f};// 将现有元素的副本推入 vector 容器中students.push_back(s);// 输出容器中的元素for (auto& s : students){std::cout << s.name << ", " << s.age << ", " << s.score << std::endl;}return 0;
}

上面的代码中,我们先创建了一个 Student 对象 s,然后将其作为参数传递给 vector 容器的 push_back 方法。在这个例子中,我们先创建了 s 这个结构体对象,再将其的副本推入 vector 容器中。

从代码的角度来看,push_back 的使用比 emplace_back 略显繁琐。但是,在一些使用场景下,push_back 仍然是更适合的选择,例如当对象类型不提供默认构造函数时。


http://www.ppmy.cn/news/148719.html

相关文章

linux下制作pe启动盘工具,自己动手定制winpe dos工具箱迷你linux u盘启动盘

z和* .xpm.gz. 4.安装maxdos和airendos&#xff0c;然后将目录maxdos和ados复制到U盘的根目录. 然后&#xff0c;您可以卸载maxdos和ados. 然后删除ados下除argj目录之外的所有文件&#xff0c;然后将argj目录下的文件移至ados&#xff0c;然后删除argj目录. 删除两个目录中的一…

maven仓库清理缓存文件(dos工具)

1.使用过maven的人都应该知道&#xff0c;maven下载jar包时&#xff0c;有时由于网络问题&#xff0c;会造成文本未下载完毕&#xff0c;残留.lastUpdated文件&#xff0c;下次使用pom时&#xff0c;由于该jar包已被cached缓存&#xff0c;又无法更新&#xff1b;特别是残留的文…

常见的DoS攻击防御方式

常见的DoS攻击防御方式 ## 攻击防御 DoS攻击&#xff08;Denial of Service attack&#xff09; DoS是Denial of Service的简称&#xff0c;即 拒绝服务 &#xff0c;造成DoS的攻击行为被称为DoS攻击&#xff0c;其目的是使计算机或网络无法提供正常的服务。最常见的DoS攻击有计…

Dos下的edit命令

edit是dos下的一个文本编辑工具&#xff0c;接下来进行一点简单的介绍。 首先通过cmd进入dos命令行界面&#xff0c;当前默认的目录为C:\Users\administrator&#xff0c;我们首先通过cd命令切换到c盘的根目录下c:\ 接下来输入edit,进入到edit工具界面,同时输入三行文本数据如下…

android 的命令行工具(dos命令)

可以通过电脑的dos界面实现对andorid(s手机)的内部文件增删改查 adb shell 进入手机中linux操作系统 ls 列举当前目录下的所有文件 cd 文件名 切换(跳转)目标文件 mkdir 文件名 新建文件 pwd 打印(显示)当前的工作目录 echo "文件内容"” >创建…

一个小小的利用kali中的工具进行DOS攻击的记录

一个小小的利用kali中的工具进行DOS攻击的记录 目标&#xff1a;我朋友的一台服务器&#xff0c;已知网址 [具体的就不写出来了] 登录后得到的是学校的教务处的大创登陆界面 nmap 网址由于挂在了学校网的后面&#xff0c;DNS解析困难&#xff0c;无法得到IP地址。所以直接转向…

dos盘启动计算机,最新万能 DOS 启动盘制作全攻略(软盘+光盘+U盘+硬盘+NTFS+应急实用工具)...

最新万能 DOS 启动盘制作全攻略(软盘+光盘+U盘+硬盘+NTFS+应急实用工具) 更新时间:2006年12月21日 00:00:00 作者: 首先说明一下各种操作系统启动到DOS的途径: WIN9x系统:开机后按F8,选择第5项回车,可以进入系统自带的基本dos7.x环境。 2K/XP/2003:系统没有自带DOS,需…

grub4dos 制作WIN7、WINPE2003、Ubuntu、dos工具箱多启动U盘 (不量产)

前些天U盘挂掉了&#xff0c;去京东上买了一个宇瞻的16G的黑骑士&#xff0c;结果用GetInfo查了一下主控&#xff0c;发现是2251-61&#xff0c;用了几款量产工具都量产不成功&#xff0c;无奈之下只能采取HDD的启动方式了。 之前一直都是用Easyboot制作的启动光盘&#xff0c;…