力扣C++学习笔记——C++ assign全面解析

c++assign是一个C++20标准中新增的头文件,主要提供了assign函数,用于将一个容器内的元素按照特定规则赋值到另一个容器中。它是STL容器操作的重要一环,具有高效、简洁、易用的特点。

assign函数有多个版本,一般使用的是容器类型相同或相似的版本。使用起来非常方便,只需一行代码即可完成多种常见操作。
二、常用操作
assign函数的常用操作包括:

1.初始化容器

// 初始化vector容器为10个0
vector vec(10);
vec.assign(10, 0); // 初始化为10个0

2.复制容器元素

vector vec1 = {1, 2, 3, 4, 5};
vector vec2;
vec2.assign(vec1.begin()+2,vec1.begin()+5);; // 复制vec1的3~5元素到vec2

3.插入元素

vector vec = {1, 2, 3, 4, 5};
vec.assign({6, 7, 8}); // 插入3个元素,等价于vec={6, 7, 8}

4.删除元素

deque deq = {1, 2, 3, 4, 5};
deq.assign(deq.begin(), deq.end() - 2); // 删除末尾2个元素

三、注意事项
使用assign函数时需要注意以下几点:

  • 1.容器类型必须相同或相容
    assign函数只能用于容器类型相同或相容的场合。

  • 2.元素的赋值方式
    assign函数将元素赋值到目标容器中,因此需要注意元素的赋值方式。如果目标容器元素类型为类对象,则需要在类中定义赋值运算符。

  • 3.对非序列容器的限制
    assign函数对于非序列容器(如map、set等)只能使用初始化列表进行赋值。

四、示例代码

 
#include <iostream>
#include <vector>
#include <deque>
#include <algorithm>
#include <unordered_map>
#include <string>using namespace std;int main()
{std::vector<int> vec1 = {1, 2, 3, 4, 5};std::cout << "vec1:";for (auto vec : vec1){std::cout << vec << " ";}std::cout << std::endl;// 初始化为10个5,直接会覆盖上面已经初始化的数据vec1.assign(10, 5);std::cout << "vec1:";for (auto vec : vec1){std::cout << vec << " ";}std::cout << std::endl;// 复制vec1的3~5元素到vec2std::vector<int> vec2;vec2.assign(vec1.begin() + 2, vec1.begin() + 5);std::cout << "vec2:";for (auto vec : vec2){std::cout << vec << " ";}std::cout << std::endl;vector<int> vec3;vec3.assign(vec1.begin() + 2, vec1.end());std::cout << "vec3:";for (auto vec : vec3){std::cout << vec << " ";}std::cout << std::endl;// 插入3个元素,等价于vec1={6, 7, 8}vec1.assign({6, 7, 8});std::cout << "vec1:";for (auto vec : vec1){std::cout << vec << " ";}std::cout << std::endl;// 删除末尾2个元素deque<int> deq(vec1.begin(), vec1.end());deq.assign(deq.begin(), deq.end() - 2);std::cout << "deq ";for (auto it : deq){std::cout << it << " ";}std::cout << std::endl;return 0;
}

在这里插入图片描述

C++中的std::deque(双端队列)和std::vector(向量)区别

C++中的std::deque(双端队列)和std::vector(向量)是两种不同的容器类型,它们有以下区别:

内部实现方式不同:std::deque使用了一种双端队列的数据结构,它由多个块(chunks)组成,每个块内部存储一部分元素。而std::vector则使用了连续的内存块来存储元素。

随机访问性能不同:由于std::vector的元素在内存中是连续存储的,因此它支持高效的随机访问,可以通过索引直接访问任意位置的元素。而std::deque虽然也支持随机访问,但由于元素分布在多个块中,访问不同位置的元素可能需要更多的指针操作,因此相对于std::vector,其随机访问的性能稍差一些。

插入和删除操作性能不同:std::deque在两端进行插入和删除操作的性能较好,因为它可以在常数时间内在两端进行操作。而std::vector在尾部进行插入和删除操作的性能也很好,但在中间或头部进行插入和删除操作时,需要移动后续元素,因此性能较差。

内存管理方式不同:std::deque相对于std::vector具有更高的内存开销,因为它需要为每个块分配额外的内存空间。而std::vector则在内存中分配一块连续的内存来存储元素,可以更有效地利用内存。

综上所述,选择使用std::deque还是std::vector取决于具体的使用场景和需求。如果需要频繁在两端进行插入和删除操作,或者不需要频繁的随机访问,std::deque可能是一个更好的选择。如果需要高效的随机访问和在尾部进行插入和删除操作,std::vector可能更适合。

参考:
https://blog.csdn.net/weixin_36670529/article/details/132767601

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/153800.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue项目Jenkins自动化部署

1. 需求描述 我们希望提交uat分支时,UAT项目能够自动发布,提交master分支时,无需自动发布,管理员手工发布 2. 效果展示 3. 采用技术 Jenkins + K8S + Docker + Nginx 4. 具体实现 4.1 编写default.conf 在Vue项目根目录新建default.conf文件,主要进行代理配置、首页…

一个模板承包你所有表情包!

深度学习自然语言处理 原创作者&#xff1a;cola meme是一种现代的交流形式&#xff0c;其模板具有基本的语义&#xff0c;任何人都可以在社交媒体上发布它。由于机器学习系统没有足够的上下文来理解meme&#xff0c;因为它比图像和文本有更丰富的内容&#xff0c;所以机器学习…

如何通过数环通,让企业吸引和留住更多优秀人才?

企业招聘员工以及员工入职&#xff0c;不仅仅只是人力资源重要职能之一&#xff0c;它们更是整个企业成功的关键。 市场永远充满竞争&#xff0c;“战争”一直都在&#xff0c;为了赢得胜利&#xff0c;让最优秀的人选加入是最好的选择。但优秀的人才永远不缺机会&#xff0c;市…

EDIFACT学习手册

EDIFACT 又名 UN/EDIFACT&#xff08;全称为 United Nations/Electronic Data Interchange For Administration, Commerce and Transport&#xff09;&#xff0c;是由联合国主导开发制定的国际通用 EDI 标准。EDI术语中的EDIFACT是指 EDIFACT 报文标准&#xff0c;本视频将为大…

虚拟机配置centos7网络

一、编辑虚拟网络 二、编辑 ifcfg-ens32 配置静态ip vim /etc/sysconfig/network-scripts/ifcfg-ens32 三、网卡设置 四、重启网络 systemctl restart network

【外汇天眼】投资之道:成功背后的频繁交易陷阱

成功的投资需要超越人性的短板&#xff0c;其中之一就是频繁交易。巴菲特曾明言&#xff0c;如果商学院的毕业生在毕业后拿一张卡片&#xff0c;每买一支股票就打一个洞&#xff0c;那么这张卡片最终会被打得最少的人将成为巨富。“钱在这里从活跃的投资者流向有耐心的投资者。…

linux内核管理

linux内核会占用一定的空间&#xff0c;所以可以清理一下不需要使用的内核. 参考链接 Linux 内核及其关联文件通常存储在 /boot 目录下&#xff0c;内核模块通常存储在 /lib/modules 目录中。 首先查看已安装的列表&#xff1a; dpkg --list | grep linux-image其中&#xff…

2023年中国聚氨酯树脂涂料需求量、市场规模及行业趋势分析[图]

聚氨酯是一种新兴的有机高分子材料&#xff0c;被誉为“第五大塑料”&#xff0c;因其卓越的性能而被广泛应用于国民经济众多领域。产品应用领域涉及轻工、化工、电子、纺织、医疗、建筑、建材、汽车、国防、航天、航空等。2022年中国聚氨酯产量已达1600万吨。 2012-2022年中国…

为什么几乎所有的量化交易都用Python?

因为python好用啊&#xff01;Python&#xff0c;作为一种功能强大且易于学习的编程语言&#xff0c;已经成为金融分析师的首选工具。 以下我将从3个方面给大家分析python为何成为量化交易的理想选择。 一、语言特性与金融分析的匹配性 1、简单易懂的语言 Python就像我们的日…

传统Office太占存储空间?快来试试这款LiberOffice

用过Microsoft Office的同学&#xff0c;在完成安装后会发现MS Office系列的软件所占内存还是不小的&#xff0c;尤其当你组件下载很多以后&#xff0c;存储量真不是一个小数目。 那么&#xff0c;有没有一款轻量级的办公软件呢&#xff1f;别着急&#xff0c;今天学长就带来这…

【vue2】前端如何播放rtsp 视频流,拿到rtsp视频流地址如何处理,海康视频rtsp h264 如何播放

文章目录 测试以vue2 为例新建 webrtcstreamer.js下载webrtc-streamervideo.vue页面中调用 最近在写vue2 项目其中有个需求是实时播放摄像头的视频&#xff0c;摄像头是 海康的设备&#xff0c;搞了很长时间终于监控视频出来了&#xff0c;记录一下&#xff0c;放置下次遇到。…

传统考勤太复杂怎么办?这个小技巧,我必须吹爆!

随着科技的不断进步&#xff0c;人脸识别技术在各个领域得到了广泛的应用。在企业管理和安全领域&#xff0c;三维人脸考勤系统成为了一种高效、准确的管理工具。 客户案例 银行 天津某银行是一家金融机构&#xff0c;对于安全性要求极高。传统的考勤系统无法满足他们对于员工…

Threejs_08 纹理颜色的调整(颜色空间的设置)

为什么写入的贴图颜色跟实际的颜色有差别呢&#xff1f; 具体为啥我也不知道&#xff0c;总之就是threejs有两个颜色空间 一个是线性的 一个是rgb那种样式的&#xff0c;但是人眼对光照强度的感知并不是线性的&#xff0c;所以threejs的默认属性&#xff0c;到人眼中&#xff…

存储区域网络(SAN)之FC-SAN和IP-SAN的比较

存储区域网络(Storage Area Network&#xff0c;SAN)用于将多个系统连接到存储设备和子系统。 早期FC-SAN&#xff1a; 采用光纤通道(Fibre Channel&#xff0c;FC)技术&#xff0c;通过光纤通道交换机连接存储阵列和服务器主机&#xff0c;建立专用于数据存储的区域网络。 传…

知识表示与知识图谱

目录 前言 一、知识与知识表示的概念 二、知识图谱 总结 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助。 &#x1f4a1;本文由Filotimo__✍️原创&#xff0c;首发于CSDN&#x1f4da;。 &#x1f4e3;如…

NSS [鹤城杯 2021]Middle magic

NSS [鹤城杯 2021]Middle magic 源码直接给了。 粗略一看&#xff0c;一共三个关卡 先看第一关&#xff1a; if(isset($_GET[aaa]) && strlen($_GET[aaa]) < 20){$aaa preg_replace(/^(.*)level(.*)$/, ${1}<!-- filtered -->${2}, $_GET[aaa]);if(preg_m…

「Verilog学习笔记」输入序列连续的序列检测

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1ns module sequence_detect(input clk,input rst_n,input a,output reg match);reg [7:0] a_tem ; always (posedge clk or negedge rst_n) begin if (~rs…

使用正则表达式匹配HTML标签出现了问题

今天有这样一个需求&#xff1a;需要匹配好多个HTML文件&#xff0c;从中找出所有的标题文字。 正则表达式 这本是一个简单的需求&#xff0c;只需要使用正则表达式进行匹配即可。下列是我们当时所使用的表达式&#xff1a; <[hH][1-6]>.*?<\/[hH][1-6]> 测试…

openfeign整合sentinel出现异常

版本兼容的解决办法&#xff1a;在为userClient注入feign的接口类型时&#xff0c;添加Lazy注解。 Lazy注解是Spring Framework中的一个注解&#xff0c;它通常用于标记Bean的延迟初始化。当一个Bean被标记为Lazy时&#xff0c;Spring容器在启动时不会立即初始化这个Bean&…