vector是一种动态数组,在内存中具有连续的存储空间,支持快速随机访问。由于具有连续的存储空间,所以在插入和删除操作方面,效率比较慢。vector有多个构造函数,默认的构造函数是构
vector是一种动态数组,在内存中具有连续的存储空间,支持快速随机访问。由于具有连续的存储空间,所以在插入和删除操作方面,效率比较慢。vector有多个构造函数,默认的构造函数是构造一个初始长度为0的内存空间,且分配的内存空间是以2的倍数动态增长的。在push_back的过程中,若发现分配的内存空间不足,则重新分配一段连续的内存空间,其大小是现在连续空间的2倍,再将原先空间中的元素复制到新的空间中,性能消耗比较大。
vector 基本用法:
我们使用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;
}
写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如何动态申请内存的元素的文章就介绍到这了,更多相关C++ vector动态申请内存元素内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: C++ vector如何动态申请内存的元素
本文链接: https://lsjlt.com/news/131211.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0