c++容器中assign()的三种用法

C++`assign` 函数功能总结及代码实例 函数的功能:优点:示例 1:使用 和 代码解释:示例 2:使用 和 代码解释:示例 3:使用 和 代码解释:这些示例展示了如何在不同的容器(、、)中使用 函数,无论是使用 还是 形式,都可以方便地对容器进行元素的重新分配和初始化。这在需要重新初始化容器或复制其他容器元素的情况下非常有用,避免了复杂的元素添加和删除操作,使代码更简洁和易维护。将上述代码保存为 文件,使用 C++ 编译器编译运行,例如: 使用 函数可以让你灵活地操作容器的元素,根据不同的需求对容器进行初始化、重置或复制元素 阅读详情

几种容器中共有的三种实现:

在这里插入图片描述
在这里插入图片描述
更详细的说明可以查看官方文档。

利用的官方文档例子能够说明这三种方法的使用方式:

#include <vector>
#include <iostream>
#include <string>
 
int main()
{
	// 注意这个变量必须得在lambda实现前定义,lambada的定义里引用捕获了这个变量
    std::vector<char> characters; 
 
    auto print_vector = [&](){
        for (char c : characters)
            std::cout << c << ' ';
        std::cout << '\n';  
    };
 
    characters.assign(5, 'a'); 
    print_vector();
 
    const std::string extra(6, 'b');
    characters.assign(extra.begin(), extra.end());
    print_vector();
 
    characters.assign({'C', '+', '+', '1', '1'});
    print_vector();
}

输出:

a a a a a 
b b b b b b 
C + + 1 1

不得不说,en.cppreference.com的这个例子太牛逼了,不仅三种方式通过一个例子完美解释了,还夹带lambda干货。

string容器的assign实现更多更灵活

查看官方文档https://en.cppreference.com/w/cpp/string/basic_string/assign
贴个官方实现:

#include <iostream>
#include <iterator>
#include <string>
 
int main()
{
  std::string s;
  // assign(size_type count, CharT ch)
  s.assign(4, '=');
  std::cout << s << '\n'; // "===="
 
  std::string const c("Exemplary");
  // assign(basic_string const& str)
  s.assign(c);
  std::cout << c << " == " << s <<'\n'; // "Exemplary == Exemplary"
 
  // assign(basic_string const& str, size_type pos, size_type count)
  s.assign(c, 0, c.length()-1);
  std::cout << s << '\n'; // "Exemplar";
 
  // assign(basic_string&& str)
  s.assign(std::string("C++ by ") + "example");
  std::cout << s << '\n'; // "C++ by example"
 
  // assign(charT const* s, size_type count)
  s.assign("C-style string", 7);
  std::cout << s << '\n'; // "C-style"
 
  // assign(charT const* s)
  s.assign("C-style\0string");
  std::cout << s << '\n'; // "C-style"
 
  char mutable_c_str[] = "C-style string";
  // assign(InputIt first, InputIt last)
  s.assign(std::begin(mutable_c_str), std::end(mutable_c_str)-1);
  std::cout << s << '\n'; // "C-style string"
 
  // assign(std::initializer_list<charT> ilist)
  s.assign({ 'C', '-', 's', 't', 'y', 'l', 'e' });
  std::cout << s << '\n'; // "C-style"
}

输出:

====
Exemplary == Exemplary
Exemplar
C++ by example
C-style
C-style
C-style string
C-style
从零开始:C++ assign函数的底层实现与性能优化 本文深入解析C++ STL容器中assign函数的底层实现机制与性能优化策略。通过分析其内存管理模型、时间复杂度及迭代器失效规则,并结合高频交易与游戏引擎等实战场景,揭示了assign函数可能存在的性能陷阱,提供了容量预留、双缓冲区交换等关键优化技巧,帮助开发者编写更高效的C++代码。 阅读详情

相关推荐

vector容器,resize/reserve/assign总结

参考 《std::vector》 vector属性 capacity 返回当前存储空间能够容纳的元素数 size 返回容器中的元素数,即 std::distance(begin(), end()) max_size 此值通常反映容器大小上的理论极限,即理论上可申请到的最大容量大小。 vector成员方法 reserve( n ) 增加 vector 的容量到大于或等于 n 的大小。 若 n > capacity() ,则扩容。分配新存储,并将原空间元素拷贝到新空间内, 若 n < cap

专注于C/C++/Linux领域创作 2559

string___assign

#include <iostream> #include <iterator> #include <string> int main() { std::string s; // assign(size_type count, CharT ch) s.assign(4, '='); std::cout << s...

weixin_30326515的博客 373

【C++STL基础入门】深入理解string类重新赋值(assign)与删除(erase)

本系列STL使用的是VS2022,C++20版本在C++中,string类是一种强大的数据类型,用于处理字符串。它提供了许多便捷的方法来操作和修改字符串。本教程将重点介绍string类的重新赋值和删除操作。我们将学习如何使用赋值运算符和相关函数来改变和删除字符串的内容。让我们深入研究这些概念。深入理解string类重新赋值(assign)与删除(erase)总结:string 类是 C++ 标准库中用于处理字符串的一个重要类。在 string 类中,重新赋值和删除操作是常用的操作之一。

m0_62599305的博客 5593

C++ assign全面解析

c++assign是一个C++20标准中新增的头文件,主要提供了assign函数,用于将一个容器内的元素按照特定规则赋值到另一个容器中。它是STL容器操作的重要一环,具有高效、简洁、易用的特点。assign函数将元素赋值到目标容器中,因此需要注意元素的赋值方式。assign函数有多个版本,一般使用的是容器类型相同或相似的版本。使用起来非常方便,只需一行代码即可完成多种常见操作。assign函数对于非序列容器(如map、set等)只能使用初始化列表进行赋值。assign函数只能用于容器类型相同或相容的场合。

weixin_36670529的博客 5688

C++中的assign函数用法

转载:http://blog.sina.com.cn/s/blog_7b3a697301014aam.html assign()函数主要是将一个容器中元素全部复制到另一个容器中,而又有两种用法: assign函数: 函数原型: void assign(const_iterator first,const_iterator last); void assign(size_type n,co...

qq_25018077的博客 4万+

UE5 StateTree实战:用分层状态机重构你的AI行为逻辑(附蓝图配置避坑点)

本文详细介绍了UE5中StateTree分层状态机的实战应用,帮助开发者重构AI行为逻辑。通过核心概念解析、迁移策略、高级技巧和避坑指南,展示了StateTree在灵活性、可维护性和并行处理方面的优势,特别适合复杂AI行为的开发与优化。

weixin_42558257的博客 247

C++容器------vector 的扩容函数使用篇

C++SLTL中六大组建中的容器是很重要的一部分的 而容器中的vector也是工作中经常用的 先来模仿库里面的vector实现一个自己的Vector: template &amp;amp;amp;amp;amp;lt;class T&amp;amp;amp;amp;amp;gt; class Vector { public: Vector():_start(NULL),_finish(NULL),_endOfstorage(NULL) {} ~V...

Misszhoudandan的博客 6152

多传感器标定全栈系统学习教程

无论是激光雷达(Lidar)、毫米波雷达(Radar)、相机(Camera)还是惯导(IMU),传感器之间的精确标定直接决定了系统的可靠性与性能。本文将以系统化的视角,梳理多传感器标定的核心知识体系,并分享一套覆盖全栈技术的学习路径。Calibration)是实现点云与图像融合的前提,而雷达与车辆的标定(Radar2Car)则是精准速度估计的关键。:Lidar2Car、Camera2Car的快速标定流程,标定板布置规范。:从单传感器标定入手(如相机内参),逐步过渡到多传感器联合标定。

weixin_41792788的博客 904

C++STL中vector容器 assign()函数的用法

http://blog.sina.com.cn/s/blog_7b3a697301014aam.html assign函数: 函数原型: void assign(const_iterator first,const_iterator last); void assign(size_type n,const T& x = T()); 功能: 将区间[first,last)的元素赋值到当前

xlm289348的专栏 7万+

从零实现地震波场模拟:交错网格有限差分法核心代码精讲

本文详细介绍了从零实现地震波场模拟的核心技术,重点讲解了交错网格有限差分法的实现过程。通过速度-应力弹性波方程的离散化处理,结合代码实例演示了应力与速度更新的关键步骤,并分享了震源加载、稳定性条件等实用技巧,为计算地球物理学研究提供实践指导。

weixin_42556197的博客 409

Remote ID的调制解调FPGA实现

Remote ID源于航空安全需求,例如在无人机密集区域实现设备跟踪和防碰撞。它类似于航空领域的ADS-B系统,但针对低空飞行器。Remote ID系统通常工作在特定频段(如2.4 GHz或5.8 GHz),通过无线链路广播数据包,包含设备ID、经纬度、高度和速度等信息。调制解调过程确保这些数据在噪声环境中可靠传输。例如,标准如ASTM F3411定义了Remote ID的协议框架,其中调制解调是关键物理层组件。

yulongfenghu的博客 1505

C++ vector容器 assign()用法

c++ vector容器assign用法

qq_37705385的博客 1293

基于航位推算与多传感器融合的高精度避障小车设计

航位推算(Dead Reckoning)是一种在无外部定位信号下通过里程计与惯性测量单元(IMU)持续积分估计位姿的基础导航方法,其核心在于运动学建模、误差累积抑制与多源数据融合。该技术具备低依赖、高实时、强确定性等工程优势,广泛应用于服务机器人、AGV、竞赛无人平台等受限环境下的自主导航系统。结合编码器高分辨率测距与九轴IMU姿态解算,可显著抑制纯里程计漂移,提升短时定位精度至厘米级。本文以全国大学生电子设计竞赛K题为背景,深入实现了一种面向确定性场地的离线建图+航位推算双模协同架构,重点解决嵌入式资源约

weixin_36328210的博客 81

C++中vector容器 assign()用法

assign函数: 函数原型: void assign(const_iterator first,const_iterator last); void assign(size_type n,const T& x = T()); 功能: 将区间[first,last)的元素赋值到当前的vector容器中,或者赋n个值为x的元素到vector容器中,这个容器会清除掉vector容器中以前的内

再不努力我们就老了 7万+

STM32CUBEMX | STM32L431RCT6的内部Flash操作

一、STM32CUBEMX配置 1、选择芯片型号: 2、配置时钟源 1、 如果选择使用外部高速时钟(HSE),则需要在System Core中配置RCC; 2、 如果使用默认内部时钟(HSI),这一步可以略过; 3、配置时钟树 STM32L4的最高主频到80M,所以配置PLL,最后使HCLK = 80Mhz即可: 4、代码生成设置 点击GENERATE CODE即可生成MDK-V5工程: 二、在MDK中编写、编译、下载用户代码 1、STM32内部Flash及HAL库API 查看所使用芯片的信息,

yongridada的博客 5567

在 PyCharm 中使用 Copilot

此外,要在 PyCharm 中使用 GitHub Copilot,您必须有效订阅 Copilot。在 PyCharm 中安装 GitHub Copilot 后,您现在可以将其用作项目的扩展。此外,它很容易安装在不同的 IDE 平台上,您还可以为特定编程语言启用 GitHub 插件。此外,按照以下步骤,您可以轻松地在 PyCharm 中安装 GitHub Copilot。此外,在 IDE 上使用 GitHub Copilot 时,您可以使用一些快捷方式。

一览无遗 1万+

C++ vector 容器assign()用法

C++ vector的assign()方法用于替换容器内容并调整大小,提供三种主要用法:1)指定数量的相同值填充;2)通过迭代器范围赋值;3)使用初始化列表(C++11+)。该方法会销毁原有元素,自动调整容器大小,可能触发内存重分配,比先clear()再insert()更高效。示例代码展示了三种用法,分别输出重复值、复制元素和初始化列表的结果。

行知SLAM 569

下载和运行GitHub上的代码教程总结

从昨天开始就想着从GitHub上下载一个开源的Vue的实战项目,希望能从中学习更多的Vue的实用内容,结果搞了半天好不容易下载了,不知道怎么弄。然而,今天终于成功了,激动地我赶紧来记录一下。 如何从GitHub上下载自己需要的项目: 1.首先,你要有一个自己的GitHub(https://github.com/)的账号。关于如何注册GitHub的账号以及如何获取你的SSH密钥这个问题,请大家参...

不怕万人阻挡,只怕自己投降 29万+

【C++】STL vector容器之assign方法

文章目录前言一、Range用法二、Fill用法三、initializer list用法总结 前言 vector的成员assign方法,负责分配新的内容至vector中,以代替现有的内容并相应的修改其size。在c++11的标准中有三种调用方式,以下分别介绍。 一、Range用法 void assign (InputIterator first, InputIterator last); range版本是迭代器调用版本,新内容是由 first 和 last 范围内的每个元素以相同的顺序构造的。使用的范围

weixin_44791073的博客 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

s.assign()用法c++_用C++11实现的assign功能

assign是boost 的一个对容器赋值的库,可以用非常简洁甚至看起来不像合法C++代码的方式对容器操作,详情可参考罗剑锋的《boost指南》。下面是我自己实现的代码:1 #ifndef ASSIGN_H2 #define ASSIGN_H34 #include 5 #include 6 #include 7 //#include 8 #include 9 #include 10 //…………1...

weixin_39595320的博客 533

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C++ 容器的assign()函数

STL中不同容器之间是不能直接赋值的,assign()可以实现不同容器但相容的类型赋值,如:list<string> names; vector<const char*> oldstyle = { "I","love","you" }; //names = oldstyle;错误!不同的类型不能执行"="操作 names.assign(oldstyle.cbegin(), oldstyle.cend

超超级钢铁侠 1万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

STL里Vector的assign()函数用法

vector里接触的第一个函数就是assign()函数原型是: 1:void assign(const_iterator first,const_iterator last); 2:void assign(size_type n,const T& x = T());第一个相当于个拷贝函数,把first到last的值赋值给调用者;(注意区间的闭合) 第二个把n个x赋值给调用者;#include<

doubleintfloat的博客 6万+

【C++】STL中vector的assign()函数用法

参考: https://blog.youkuaiyun.com/qq_45893475/article/details/120250105 https://blog.youkuaiyun.com/doubleintfloat/article/details/52280481?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&.

lemonxiaoxiao的博客 9599

C++ assign()函数的简单使用

#include &lt;iostream&gt;#include &lt;string&gt;#include &lt;vector&gt;#include &lt;list&gt;using namespace std;void assign_use(){ char *ac[] = {"liu","yu","dong","xiao","fa"

liuyudong_的博客 9051

​C++ 容器操作:assign 函数详解

​在 C++ 标准模板库(STL)中,std::list等容器都提供了assign成员函数,用于。它比操作符更灵活,支持多种初始化方式。本文将详细介绍assign的用法、性能分析及适用场景。

weixin_72058778的博客 1371

c++string容器(assign的用法)

c++string容器(assign的用法)

敖丙007的博客 572
上一篇: std::move与std::forward用于模板函数时,模板参数<T && a>中的参数a退化成左值的探讨
下一篇: 利用lambda实现set的自定义排序准则的局限
杂质想当杂志
博客等级 码龄10年 13粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值