温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-07-27 13:39:24 来源:亿速云 阅读:523 作者:小新 栏目:开发技术

这篇文章主要介绍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数组,大小为200
char *p = new char(200); //new一个char ,其初始值为200

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI