去长沙玩了几天,没学

1.new 与 delete



通过调用分析了解到new在堆区开辟数据 delete就是释放数据

案例
#include<stdio.h>
#include <malloc.h>
class ae
{
public:
~ae()
{
printf("释放中");
};
private:
};
int main(int argc, char* argv[])
{
ae* a1 = new ae[10];
delete[] a1;
}

2.12
vector(动态数组编写)
![](https://img2023.cnblogs.com/blog/3001071/202302/3001071-20230211183500407-397745944.png)

案例2
.c文件
#include<stdio.h>
#include"a.h"
void test1()
{ Vector<int >* pvector = new Vector<int>(5); pvector->push_back(3);
pvector->push_back(5);
pvector->insert(1, 9);
int a = 0;
pvector->at(8,&a);
printf("取出来的是%d", a);
delete pvector;
} int main()
{ test1();
return 0;
} .h 文件
#include<Windows.h>
#define SUCCESS 1 // 成功 #define MALLOC_ERROR -2 // 申请内存失败
#define INDEX_ERROR -3 // 错误的索引号 template <class T_ELE>
class Vector
{
public:
Vector();
Vector(DWORD dwSize);
~Vector();
public:
DWORD at(DWORD dwIndex, OUT T_ELE* pEle);
DWORD push_back(T_ELE Element);
VOID pop_back();///存储数据
DWORD insert(DWORD dwIndex, T_ELE Element);
DWORD capacity();
VOID clear();
BOOL empty();
VOID erase(DWORD dwIndex);
DWORD size();
private:
BOOL expand();
private:
DWORD m_dwIndex;///实时长度
DWORD m_dwIncrement;//增加长度
DWORD m_dwLen;//长度
DWORD m_dwInitSize;//大小
T_ELE* m_pVector;//地址
}; template <class T_ELE>
Vector<T_ELE>::Vector()
:m_dwInitSize(100), m_dwIncrement(5)
{
//1.创建长度为m_dwInitSize个T_ELE对象
m_pVector = new T_ELE[m_dwInitSize];
printf("%x\n", m_pVector); //2.将新创建的空间初始化
memset(m_pVector, 0, m_dwInitSize * sizeof(T_ELE));
//3.设置其他值
m_dwLen = 100;
m_dwIndex = 0;
//// 返回 }
template <class T_ELE>
Vector<T_ELE>::Vector(DWORD dwSize)
:m_dwIncrement(5)
{
//1.创建长度为m_dwInitSize个T_ELE对象
m_pVector = new T_ELE[dwSize];
printf("%x\n", m_pVector);
//2.将新创建的空间初始化
memset(m_pVector, 0, dwSize * sizeof(T_ELE));
//3.设置其他值
m_dwLen = dwSize;
m_dwIndex = 0;
//// 返回
}
template <class T_ELE>
Vector<T_ELE>::~Vector()
{
printf("释放成功");
delete[] m_pVector;
m_pVector = NULL;
} template <class T_ELE>
BOOL Vector<T_ELE>::expand()
{ T_ELE* m_ptemp = NULL;//地址
///增加以后的长度
// 1. 计算增加后的长度
DWORD dwTemplen = m_dwLen + m_dwIncrement;
// 2. 申请空间
m_ptemp = new T_ELE[dwTemplen]; // 3. 将数据复制到新的空间
memcpy(m_ptemp, m_pVector, sizeof(T_ELE) * m_dwLen); // 4. 释放原来空间
delete[] m_pVector;
m_pVector = m_ptemp;
m_ptemp = NULL;
// 5. 为各种属性赋值
m_dwLen = dwTemplen; return true;
} template <class T_ELE>
DWORD Vector<T_ELE>::push_back(T_ELE Element)
{
//1.判断是否需要增容,如果需要就调用增容的函数
//索引与最大
if (m_dwIndex >= m_dwLen)
{
expand();
} //2.将新的元素复制到容器的下一个位置
memcpy(&m_pVector[m_dwIndex], &Element, sizeof(T_ELE)); //3.修改属性值
m_dwIndex++;
return SUCCESS;
} template <class T_ELE>
DWORD Vector<T_ELE>::insert(DWORD dwIndex, T_ELE Element)
{
//1.判断是否需要增容,如果需要就调用增容的函数
if (m_dwIndex >= m_dwLen)
{
expand();
} //2.判断索引是否在合理区间
if (dwIndex <0 || dwIndex > m_dwLen)
{
printf("输入错误"); } //3.将dwIndex之后的元素后移
// 1 2 3 5 4 5 6 7 8
//4.将Element元素复制到dwIndex位置
for (int i = m_dwIndex; i >dwIndex; i--)
{
memcpy(&m_pVector[i], &m_pVector[i-1], sizeof(T_ELE));
}
memcpy(&m_pVector[dwIndex], &Element, sizeof(T_ELE)); //5.修改属性值
m_dwIndex++;
return SUCCESS;
}
template <class T_ELE>
DWORD Vector<T_ELE>::at(DWORD dwIndex, T_ELE* pEle)
{
//判断索引是否在合理区间
if (dwIndex <0 || dwIndex > m_dwLen-1)
{
printf("输入错误 取出来的是乱码:\n"); }
//将dwIndex的值复制到pEle指定的内存
memcpy(pEle, &m_pVector[dwIndex], sizeof(T_ELE));
return SUCCESS;
} //其他函数。。自己实现

最新文章

  1. 更改计算机名称后 导致 sql server 2008 R2 用windows账户不能附加的错误解决办法
  2. jQuery 增加 删除 修改select option .
  3. 浅谈C语言变量声明的解析
  4. Hyperledge 开发环境配置常见问题
  5. mongoDB学习记录---PHP扩展的find返回值
  6. linux操作系统-脚本入门
  7. QT4/5中文乱码问题解决
  8. php开发网站编码统一问题
  9. iOS UIImage DownLoad图片的下载缓存全部在此
  10. Windows Server 2012 R2中的网络诊断命令
  11. iBox v2.0 发布,Web化仿iOS7界面/交互的JavaScirpt库
  12. JS函数与call()apply()详解
  13. VS2010+Visual Assist X
  14. NET应用——使用RSA构建相对安全的数据交互
  15. Ubuntu 安装 SQL Server
  16. dedecms在任意页面调用任意栏目文章
  17. Spring boot 整合redis单机版
  18. 比较ArrayList、LinkedList、Vector
  19. Daily Pathtracer!安利下不错的Pathtracer学习资料
  20. JavaScript:鼠标拖拽效果

热门文章

  1. 靶机练习: Vikings
  2. 微信小程序地区和location_id对应关系
  3. vue 强制刷新数据 this.$forceUpdate()
  4. 关于RESTful 的使用(实战)
  5. AIR32F103(七) AIR32F103CBT6/CCT6启用96K内存
  6. 跟光磊学Java-macOS版Java8开发环境搭建(基于Intel x86 64-bit)
  7. 字符编码:Unicode &amp; UTF-16 &amp; UTF-8
  8. 已完成 10000 多次提交,Solon Java Framework v1.12.1 发布
  9. 升级csproj文件为vs2017工程格式(SDK样式)
  10. 线段树套线性基——题解P4839 P哥的桶