去长沙玩了几天,没学

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;
} //其他函数。。自己实现

2.11-12 滴水new-delete-vector(动态数组编写)的更多相关文章

  1. C++ vector动态数组

    #include<vector>头文件 vector类称作向量类 百度百科的解释:https://baike.baidu.com/item/vector/3330482 我喜欢把知识点拿出 ...

  2. C++向量 vector动态数组

    需要包含头文件, #include  <vector>    using namespace std; vector 容器与数组相比其优点在于它能够根据需要随时自动调整自身的大小以便容下所 ...

  3. Vector(动态数组)怎么用咧↓↓↓

    定义方式:vector<int> a; //二维vector<int>a[100] 在末尾压入容器:a.push_back(x);//二维 a[i].push_back(x) ...

  4. vector动态数组

    vector是STL模板库中的序列式容器,利用它可以有效地避免空间的浪费. 创建vector容器 vector< int >v:vector< char >:vector< ...

  5. vc++简单的vector动态数组实现

    #ifndef __MYVECTOR__ #define __MYVECTOR__ #include <Windows.h> #define SUCCESS 1 // 成功 #define ...

  6. 八连通(vector动态数组法)

    题目和一般的八连通一样,但行数和列数未定,相乘对于1e6,直接开a[1e6][1e6]的数组肯定会爆内存.用二维的动态vector就能很好的解决这个问题 #include<bits/stdc++ ...

  7. C++ Vector 动态数组

    Vectors 包含着一系列连续存储的元素,其行为和数组类似.访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线 ...

  8. C++泛化动态数组

    泛化动态数组 动态数组的核心思想是在存储数据时动态的管理数组元素占用的内存,通过调用动态数组的类方法来对数组中的数据进行增删改查操作.最初我们为数组申请10个元素的空间,放我们不断向数组中添加数据时, ...

  9. C++ Primer : 第十二章 : 动态内存之动态数组

    动态数组的分配和释放 new和数组 C++语言和标准库提供了一次分配一个对象数组的方法,定义了另一种new表达式语法.我们需要在类型名后跟一对方括号,在其中指明要分配的对象的数目. int* arr ...

  10. c++ 动态内存 动态数组

    动态内存-动态数组 习题12.23 //连接字符串到动态数组 char *c = new char[20](); char a[] = "hello "; char b[] = & ...

随机推荐

  1. python小练习:涉及print,json,numpy

    枚举参考文件夹中的文件,并与待比较文件件中的同名文件比较是否一致. #! /usr/bin/python3.6 # -*- coding:utf-8 -*- import os import sys ...

  2. OpenCV之C++经典案例

    四个案例实战 1.刀片缺陷检测 2.自定义对象检测 3.实时二维码检测 4.图像分割与色彩提取 1.刀片缺陷检测 问题分析 解决思路 尝试二值图像分析 模板匹配技术 代码实现 #include < ...

  3. 关于linux配置java环境变量问题

    前言 这几天一直在学java, 所以配置环境变量是必不可少的步骤,然后我简单的研究了一下,当然也只是皮毛而已 环境变量的就近原则 我电脑下载了oracle公司的jdk(手动配置环境变量), 和直接源里 ...

  4. MyBatis02:流程分析、注解、代理dao实现CRUD、参数深入、传统DAO、配置

    今日内容 回顾 mybatis的自定义.分析和环境搭建 完善基于注解的mybatis mybatis的curd(基于代理dao的方式)※ mybatis的参数深入及结果集的深入 mybatis中基于传 ...

  5. 【每日一题】【DFS/回溯】2022年1月1日-113. 路径总和 II

    给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径. 叶子节点 是指没有子节点的节点. 来源:力扣(LeetCode)链接 ...

  6. 从零入门项目集成Karate和Jacoco,配置测试代码覆盖率

    解决问题 在SpringBoot项目中,如何集成Karate测试框架和Jacoco插件.以及编写了feature测试文件,怎么样配置才能看到被测试接口代码的覆盖率. 演示版本及说明 本次讲解,基于Sp ...

  7. 盘点现在用的SqlServer 5种分页方式和拉姆达表达式分页,进来看看吧。

    现在基本上大家都在使用各种轮子自带的分页,大家是否还记得sql分页怎么写? 今天我们就来盘一盘怎么写和用哪种方式写. 欢迎大家评论区讨论. 1.ROW_NUMBER() OVER()方式(SQL201 ...

  8. openresty package path

    openresty lua_package_path 是整个openresty最基础的功能,不理解 path就无法做项目,更无法写框架. 先看下文档lua_package_path https://g ...

  9. Vue中实现自定义excel下载

    目录 第一种:后端生成excel 第二种:前端合成excel 总结 参考资料 最近在工作中遇到一个需求,就是需要在前端实现一个错误模板Excel的下载功能. 实现下载有两种方式,一种是后端生成一个ex ...

  10. 分享一个项目中在用的图片处理工具类(图片缩放,旋转,画布格式,字节,image,bitmap转换等)

    using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Dra ...