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

这篇具有很好参考价值的文章主要介绍了力扣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元素到vec2
    std::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++中assign函数,leetcode,C++,leetcode,c++,学习

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文章来源地址https://www.toymoban.com/news/detail-841905.html

到了这里,关于力扣C++学习笔记——C++ assign全面解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 虚幻学习笔记10—C++函数与蓝图的通信

            除了上一章C++变量与蓝图通信讲的变量能与蓝图通信外,还有函数和枚举也可以和蓝图通信。函数的为”UFUNCTION“、枚举的为”UENUM“。 2.1、BlueprintCallable蓝图中调用   该函数时带执行的,带入如下。编译成功后在蓝图中输入后可以找到,并点击使用如

    2024年02月04日
    浏览(39)
  • 学习笔记:C++环境下OpenCV的findContours函数的参数详解及优化

    这个是Visual Studio2019版本在OpenCV环境配置好后所显示的 6个参数 ,也即为全部参数 但是, 常用参数仅有四个 (参见程序里的第二行注释)  参数1    image  : 单通道图像矩阵。待提取轮廓的图像,可以是灰度图, 常用的是二值图 (C++中可选择使用Canny,拉普拉斯等边缘检测算法

    2024年02月07日
    浏览(28)
  • 全面理解C++函数最难理解的部分:数组形参,函数指针,以及函数指针作为形参

    我提到的这些部分,是我在自学C与C++中遇到的比较困难的点。因为初学者的编程,不太容易使用到这些点,所以很容易造成遗忘,并且自己写很容易出错。 最近在看标准C库的源码的时候遇到了这样的困惑,就是关于函数指针,或者说,把一个函数作为另一个函数的参数的这

    2024年02月07日
    浏览(31)
  • 【C++】map/multimap/set/multiset的经典oj例题 [ 盘点&全面解析 ] (28)

    前言 大家好吖,欢迎来到 YY 滴C++系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁 主要内容含: 欢迎订阅 YY 滴C++专栏!更多干货持续更新!以下是传送门! YY的《C++》专栏 YY的《C++11》专栏 YY的《Linux》专栏 YY的《数据结构》专栏 YY的《C语言基础》专栏 YY的《初学者易

    2024年02月04日
    浏览(34)
  • 【C++干货基地】面向对象核心概念与实践原理:拷贝构造函数的全面解读

    🎬 鸽芷咕 :个人主页  🔥 个人专栏 : 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活!   哈喽各位铁汁们好啊,我是博主鸽芷咕《C++干货基地》是由我的襄阳家乡零食基地有感而发,不知道各位的城市有没有这种实惠又全面的零食基地呢?C++ 本身作

    2024年03月13日
    浏览(35)
  • 入门力扣自学笔记272 C++ (题目编号:2544)

    2544. 交替数字和 给你一个正整数 n 。n 中的每一位数字都会按下述规则分配一个符号: 最高有效位 上的数字分配到 正 号。 剩余每位上数字的符号都与其相邻数字相反。 返回所有数字及其对应符号的和。 输入:n = 521 输出:4 解释:(+5) + (-2) + (+1) = 4 输入:n = 111 输出:1 解

    2024年02月13日
    浏览(29)
  • 入门力扣自学笔记260 C++ (题目编号:2413)

    2413. 最小偶倍数 给你一个正整数 n ,返回 2 和 n 的最小公倍数(正整数)。 输入:n = 5 输出:10 解释:5 和 2 的最小公倍数是 10 。 输入:n = 6 输出:6 解释:6 和 2 的最小公倍数是 6 。注意数字会是它自身的倍数。 1 = n = 150 来源:力扣(LeetCode) 链接:https://leetcode.cn/probl

    2023年04月26日
    浏览(26)
  • 入门力扣自学笔记256 C++ (题目编号:1019)

    1019. 链表中的下一个更大节点 给定一个长度为 n 的链表 head 对于列表中的每个节点,查找下一个 更大节点 的值。也就是说,对于每个节点,找到它旁边的第一个节点的值,这个节点的值 严格大于 它的值。 返回一个整数数组 answer ,其中 answer[i] 是第 i 个节点( 从1开始 )的

    2023年04月17日
    浏览(25)
  • 入门力扣自学笔记257 C++ (题目编号:1041)

    1041. 困于环中的机器人 在无限的平面上,机器人最初位于 (0, 0) 处,面朝北方。注意: 北方向 是y轴的正方向。 南方向 是y轴的负方向。 东方向 是x轴的正方向。 西方向 是x轴的负方向。 机器人可以接受下列三条指令之一: \\\"G\\\":直走 1 个单位 \\\"L\\\":左转 90 度 \\\"R\\\":右转 90 度

    2023年04月11日
    浏览(23)
  • 入门力扣自学笔记279 C++ (题目编号:1123)

    1123. 最深叶节点的最近公共祖先 给你一个有根节点  root  的二叉树,返回它  最深的叶节点的最近公共祖先  。 回想一下: 叶节点  是二叉树中没有子节点的节点 树的根节点的  深度  为  0 ,如果某一节点的深度为  d ,那它的子节点的深度就是  d+1 如果我们假定  A

    2024年02月09日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包