我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++ vector怎么动态申请内存的元素

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++ vector怎么动态申请内存的元素

这篇文章主要介绍C++ vector怎么动态申请内存的元素,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

vector是一种动态数组,在内存中具有连续的存储空间,支持快速随机访问。由于具有连续的存储空间,所以在插入和删除操作方面,效率比较慢。vector有多个构造函数,默认的构造函数是构造一个初始长度为0的内存空间,且分配的内存空间是以2的倍数动态增长的。在push_back的过程中,若发现分配的内存空间不足,则重新分配一段连续的内存空间,其大小是现在连续空间的2倍,再将原先空间中的元素复制到新的空间中,性能消耗比较大。

vector 基本用法:

  • front()返回头部元素的引用,可以当左值

  • back()返回尾部元素的引用,可以当左值

  • push_back()添加元素,只能尾部添加

  • pop_back()移除元素,只能在尾部移除

  • erase(iterator) 是根据位置进行删除,如果想要删除某个元素,需要找到当前元素的迭代器位置,再进行删除

  • insert() 结合迭代器位置插入指定的元素

我们使用vector时候,有时候会插入一些动态内存数据(例如new出来的指针插入到vector中)。这时候我们一定要注意C++的内存管理,因为C++的内存管理原则,谁申请的,谁销毁。我们如果不对vector里的指针对应的动态内存进行销毁操作,直接clear()的话就会造成内存泄露。所以我们需要首先遍历vector,把vector中元素存储的指针对应动态内存销毁掉,然后再clear()掉vector。

demo示例:

#include <vector>#include <iostream>#include <cstring>using namespace std; int main(){    vector<char *> obj;        //vector中插入动态内存    for(int i=0;i<10;i++)    {        char * ptr = new char[100];        memset(ptr, 0 , 100);                obj.push_back(ptr);    }    //需要清理申请的动态内存,然后才能清空vector,否则会造成内存泄露    for(vector<char *>::iterator it = obj.begin(); it != obj.end(); it++)    {        if(*it != NULL)        {            delete *it;            *it = NULL;        }    }    obj.clear();     return 0;}

番外篇:new char[100]和new char(100)的区别

写demo的时候,顺手写了new char(100)。。。后面发现不对了。。。哎。。。所以加了个番外篇,记录一下。
new char[100]和new char(100)的区别,其实这个属于分配问题,大家使用时还是要注意的,失之毫厘差以千里啊!

详情如下:

char *p = new char[200]; // new一个char数组,大小为200char *p = new char(200); //new一个char ,其初始值为200

以上是“C++ vector怎么动态申请内存的元素”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++ vector怎么动态申请内存的元素

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C++ vector怎么动态申请内存的元素

这篇文章主要介绍C++ vector怎么动态申请内存的元素,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!vector是一种动态数组,在内存中具有连续的存储空间,支持快速随机访问。由于具有连续的存储空间,所以在插入和删
2023-06-20

c++怎么输出vector中的元素

要输出vector中的元素,可以通过遍历vector并输出每个元素。以下是一个示例代码:#include #include int main() {std::vector vec = {1,
c++怎么输出vector中的元素
2024-03-02

怎么在C++中动态内存分配

今天就跟大家聊聊有关怎么在C++中动态内存分配,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。按需分配,根据需要分配内存,不浪费。内存拷贝函数void* memcpy(void* de
2023-06-14

c#数组动态添加元素的方法是什么

在C#中,数组的大小是固定的,无法动态添加元素。如果需要动态添加元素,可以使用List类。List类是一个泛型集合类,可以根据需要动态调整大小。以下是一种使用List类动态添加元素的方法:```csharpList numbers = ne
2023-09-26

C语言动态内存分配怎么使用

这篇文章主要介绍了C语言动态内存分配怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言动态内存分配怎么使用文章都会有所收获,下面我们一起来看看吧。一、动态内存分配的意义C语言中的一切操作都是基于内存的
2023-06-30

uniapp怎么动态控制元素的显示隐藏

在Uniapp中,我们经常需要根据用户的操作或者其他条件来显示或隐藏一些页面元素。例如,当用户点击一个按钮时,我们需要显示一个弹窗窗口,或者根据用户是否登录来动态地显示登录或者注册按钮。在这种情况下,我们可以使用Uniapp提供的v-show指令来动态地控制元素的显示与隐藏。v-show指令的使用非常简单,可以在需要控制的元素上加上v-show指令,然后将指令的值设置成一个布尔
2023-05-14

C语言动态内存管理的方法是什么

本文小编为大家详细介绍“C语言动态内存管理的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言动态内存管理的方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.为什么需要动态内存分配关于这个
2023-06-29

C语言的动态内存管理是什么意思

这篇文章将为大家详细讲解有关C语言的动态内存管理是什么意思,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、动态内存分配(1)用malloc类的函数分配内存;(2)用这些内存支持应用程序;(3)用free
2023-06-29

C语言动态内存管理malloc函数怎么使用

这篇文章主要讲解了“C语言动态内存管理malloc函数怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言动态内存管理malloc函数怎么使用”吧!1.C语言动态内存管理库函数介绍1
2023-07-04

css怎么使用滚动条来显示元素内溢出的内容

要给元素添加滚动条以显示溢出的内容,可以使用CSS的overflow属性。例如,如果要在元素内部添加垂直滚动条,可以将元素的overflow-y属性设置为scroll:```css.element {overflow-y: scroll;}
2023-10-12

C++中怎么使用new和delete进行动态内存分配与数组封装

这篇文章主要讲解了“C++中怎么使用new和delete进行动态内存分配与数组封装”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++中怎么使用new和delete进行动态内存分配与数组封装
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录