码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • vector用法


    目录

    vector底层数据结构:

    方法:

    增加:

    删除:

    查询:


    vector底层数据结构:

    动态开辟的数组,通过三个指针_first、_last、_end维护
    在这里插入图片描述

    • _first指向动态数组的首地址
    • _last指向最后一个有效元素的尾后
    • _end指向动态数组最后一个位置的尾后

    size为容器的有效元素,size=_last - _first
    _end - _first 为容器当前的最大容量

    方法:

    增加:

    • push_back(val),尾插,O(1),容量不够时会扩容
    • insert(it,val),在it迭代器指向的位置添加元素,O(n),容量不够时会扩容,返回值为指向该位置的迭代器

    删除:

    • pop_back(),尾删,O(1)
    • erase(it),删除迭代器指向位置的元素,O(n),返回值为指向该位置的迭代器

    查询:

    operator[] , 下标的随机访问 ,O(1)
    iterator 迭代器遍历容器
    foreach语法糖(通过iterator实现)

    注:
    对容器进行连续的插入或删除(insert/erase)时,一定要更新迭代器,否则第一次操作后,迭代器就失效了!

    常用方法:
    size() , empty()
    reserve(int); 预留空间,只开空间,不添元素
    resize(int); 扩容,即开空间,也添元素

    swap() ,两容器进行元素交换

    代码练习:

    1. #include
    2. #include
    3. using namespace std;
    4. int main()
    5. {
    6. vector<int> vec;
    7. vec.reserve(20);
    8. for (int i = 0; i < 20; i++)
    9. {
    10. vec.push_back(rand() % 100);
    11. }
    12. for (int i = 0; i < 20; i++)
    13. {
    14. cout << vec[i] << " ";
    15. }
    16. cout << endl;
    17. auto it1 = vec.begin();
    18. while (it1 != vec.end())
    19. {
    20. if (*it1 % 2 == 0)
    21. {
    22. it1 = vec.erase(it1);
    23. }
    24. else
    25. {
    26. it1++;
    27. }
    28. }
    29. for (it1=vec.begin(); it1 != vec.end(); it1++)
    30. {
    31. cout << *it1 << " ";
    32. }
    33. cout << endl;
    34. int size = vec.size();
    35. for (it1=vec.begin();it1!=vec.end();it1++)
    36. {
    37. if (*it1 % 2 != 0)
    38. {
    39. it1 = vec.insert(it1, *it1 - 1);
    40. it1++;
    41. }
    42. }
    43. for (auto x : vec)
    44. {
    45. cout << x << " ";
    46. }
    47. cout << endl;
    48. vector<int> tmp(12);
    49. for (auto& x : tmp)
    50. {
    51. x = 12;
    52. }
    53. for (auto& x : tmp)
    54. {
    55. cout << x << " ";
    56. }
    57. swap(vec, tmp);
    58. cout << endl;
    59. for (auto& x : tmp)
    60. {
    61. cout << x << " ";
    62. }
    63. return 0;
    64. }

  • 相关阅读:
    [英雄星球六月集训LeetCode解题日报] 第27日 图
    python--基础知识点--memray
    【2022秋招面经】——Django
    11.22IG客户情绪报告: 黄金、原油、澳元、日元、欧元、英镑
    huggingface/transformers 用Trainer 和 不用Trainer
    python 编写m3u8视频格式下载小工具
    七分钟,数据转换器get到了
    gitlab拉取项目报128 fatal: unable to access ‘xxx.git/‘
    软件测试 -- 入门 1 软件测试是什么?
    数据结构 第六章 树与二叉树(一)
  • 原文地址:https://blog.csdn.net/weixin_73567058/article/details/133824696
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号