分配一维动态数组or 二维动态数组的方法以及学习 new 方法or vector
先来个开胃菜
// 使用new动态分配存储空间 #include<iostream>
using std::cout; int main()
{
// 第1种方式
int *a=new int;
*a=;
cout<<"使用第一种方式进行动态分配存储空间的结果为:\n"
<<"*a= "<<*a<<std::endl;
delete a; // 释放动态存储空间
// 第2种方式
int *b=new int();
cout<<"使用第一种方式进行动态分配存储空间的结果为:\n"
<<"*b= "<<*b<<std::endl;
delete b; // 释放动态存储空间
// 第3种方式
int *c;
c=new int();
cout<<"使用第一种方式进行动态分配存储空间的结果为:\n"
<<"*c= "<<*c<<std::endl;
delete c; // 释放动态存储空间 // 动态创建数组
float *d=new float [];//区别 1 new 类型()和 2 new 类型[数量]
//一个是通过构造函数创建一个对象
// 一个是创建动态数组但是没有初始化 如果是内置类型会有默认的构造函数
//大多数需要再次分别构造初始化
d[]=;
d[]=;
d[]=;
cout<<"d[0]= "<<d[]<<std::endl;
d=d+; //数组名和指针之间的根本区别
cout<<"d[0]= "<<d[]<<std::endl;
d=d-;
cout<<"d[0]= "<<d[]<<std::endl;
delete [] d; // 释放动态存储空间
return ;
}
使用第一种方式进行动态分配存储空间的结果为:
*a= 1
使用第一种方式进行动态分配存储空间的结果为:
*b= 2
使用第一种方式进行动态分配存储空间的结果为:
*c= 3
d[0]= 3
d[0]= 6
d[0]= 3
以上为执行结果 自己想啊!!!!
new一个指针数组
对于类A的指针,可以这样写,不仅仅new,还调用了A的构造函数。
A *P = new A();
但是对于new 一个指针数组,我们可以这么写:
A **P = new A *[10];//这里是创建了10个A类型的指针 返回的是指针的地址 切记没有初始化后面没有加上()
但是我们还没有进行构造呢?//这里不能忘记了构造啊!!!!
for(int i=0; i<10; i++)
{
p[i] = new A();
}
还有一个问题就是释放:
for(int i=0; i<10; i++)
{
delete p[i];//为什么不是delete[]p[i]
}
delete [] p;//这一步很关键啊 不同的delete 不同的意图啊 自己想吧!
—————————————————————————————————————————
!!!!!!!!!!!!!!!!!重点
创建动态二维数组
1 pointer to pointer(二维指针
int **dynamicArray = 0;
dynamicArray = new int *[ROWS] ; for( int i = 0 ; i < ROWS ; i++ )
{
dynamicArray[i] = new int[COLUMNS];//显然是多少列。切记没有初始化没有加上()!!!!!!是随机值哦!!//这里注意和上面的分配指针数组的区别啊!是一个[]符号啊不是()符号!
//这里两者[] ()区别是:一个是分配多少个对象至于初始化看是不是内置类型和加不加上()
//一个是构造一个对象
}
for(int i = 0 ; i < ROWS ; i++ )
{
delete [] dynamicArray[i] ;//这里也是同样要区别与指针数组的释放啊!前面加上了一个[]!!知道什么意思吧
}
delete [] dynamicArray ; //加个餐!!!!!!!!!!!!
下面描述正确的是 int *p1 = new int[];
int *p2 = new int[](); p1和p2申请的空间里面的值都是随机值
p1和p2申请的空间里的值都已经初始化
p1申请的空间里的值是随机值,p2申请的空间里的值已经初始化(对)
p1申请的空间里的值已经初始化,p2申请的空间里的值是随机值
解释
在C++primer(第5版)中关于new的讨论有:
、new当个对象
new在自由空间分配内存,但其无法为其分配的对象命名,因次是无名的,分配之后返回一个指向该对象的指针。 int *pi = new int; // pi指向一个动态分配的,未初始化的无名对象
此new表达式在自由空间构造一个int类型对象,并返回指向该对象的指针。 默认情况下,动态分配的对象是默认初始化的,这意味着内置类型或组合类型的对象的值是无定义的,而类类型对象将用默认构造函数进行初始化。 、new(多个对象)数组
new分配的对象,不管单个对象还是多个对象的分配,都是默认初始化。但可以对数组进行值初始化,方法就是:在大小之后添加一对空括号。 int *pia = new int[]; // 10个未初始化int
int *pia2 = new int[](); // 10个值初始化为0的int int *p2 = new int[]();申请了空间,而且进行了初始化int *p1 = new int[];只申请空间,没有进行初始化原因:对于一些结构体,我们可以看到()往往表示构造函数,int是基本类型算初始化吧理由:你可以测试输出两种的值你会发现p1的值未知,而p2清零了 new运算符只是申请分配一个内存空间而已,因为不知道为其分配对象的名称,所以分配之后返回的只是一个指向该对象的指针,并没有初始化,加上一个()后,就相当于调用了默认构造函数,会默认初始化,用0来初始化
//还是vector比较好理解啊!也是比较好使用!!! 二维动态数组而且是分配在栈空间的动态数组
2 vector of vector
#include <vector>
using namespace std;
#define ROWS 4
#define COLUMNS 4
vector<vector<int> > dynamicArray(ROWS, vector<int>(COLUMNS));
for(int i = 0;i < dynamicArray.size();++i)//有错 int i 类型 不对 与size()函数不匹配啊
{
for(int j = 0;j < dynamicArray[i].size();++j)//有错
{
dynamicArray[i][j] = i*j;
}
}
for(int i = 0;i < dynamicArray.size();++i)//这里有错误 自己找 同上
{
for(int j = 0;j < dynamicArray[i].size();++j)//有错
{
cout << dynamicArray[i][j] << endl;
}
}
分配一维动态数组or 二维动态数组的方法以及学习 new 方法or vector的更多相关文章
- [转载]C++二维动态数组memset()函数初始化
来源:https://blog.csdn.net/longhopefor/article/details/20994919 先说说memset函数: void *memset(void *s,int ...
- go 动态数组 二维动态数组
go使用动态数组还有点麻烦,比python麻烦一点,需要先定义. 动态数组申明 var dynaArr []string 动态数组添加成员 dynaArr = append(dynaArr, &quo ...
- java基础5 (一维)数组和二维数组
本文知识点(目录): 一维数组(一维数组的概念.优点.格式.定义.初始化.遍历.常见异常.内存分析以及常见操作(找最大值.选择排序.冒泡排序等等)) 二维数组(二维数组的遍历.排序.查找.定义. ...
- 一维数组、二维数组——Java
一. 一维数组 1. 数组是相同类型数据的有序集合 相同类型的若干个数据,按照一定先后次序排列组合而成 每个数组元素可以通过一个下标来访问它们 其中,每一个数据称作一个数组元素 2. 数组特点: 其 ...
- C#的一维数组和二维数组定义方式:
一维数组: //一维数组定义与初始化 ,, };//第一种方式 , , }; //第二种方式 int[] one3; //第三种方式 one3=,,}; 二维数组: //二维数组定义与初始化 //不规 ...
- C# 数组、一维数组、二维数组、多维数组、锯齿数组
C# 数组.一维数组.二维数组.多维数组.锯齿数组 一.数组: 如果需要使用同一类型的对象,就可以使用数组,数组是一种数据结构,它可以包含同一类型的多个元素.它的长度是固定的,如长度未知的情况下,请 ...
- demo:动态生成专属二维码
在日常生活中,随处可见二维码,那么js如何生成动态的专属二维码?其实,通过"二维码插件"我们可以快速生成二维码.在这,记录一下的生成专属二维码demo,一起来看看jquery.qr ...
- 微信小程序动态生成保存二维码
起源:最近小程序需要涉及到一些推广方面的功能,所以要写一个动态生成二维码用户进行下载分享,写完之后受益良多,特此来分享一下: 一.微信小程序动态生成保存二维码 wxml: <view class ...
- 二维数组,锯齿数组和集合 C# 一维数组、二维数组(矩形数组)、交错数组(锯齿数组)的使用 C# 数组、多维数组(矩形数组)、锯齿数组(交叉数组)
二维数组,锯齿数组和集合 一.二维数组 二维数组:一维数组----豆角二维数组----表格 定义:1.一维数组:数据类型[] 数组变量名 = new 数据类型[数组长度];数据类型[] 数组变量名 = ...
随机推荐
- 移动应用中的AR开发,5款最受欢迎工具推荐!
英文原文:Top 5 Tools for Augmented Reality in Mobile Apps 还记得前段时间在网上很火的 3D 小熊不?托它的福,为相当一部分人科普了增强现实(AR) ...
- zookeeper集群安装(转)
转载地址:http://www.blogjava.net/hello-yun/archive/2012/05/03/377250.html 本方法,本人亲自试验,可以成功. ZooKeeper是一个分 ...
- 数据结构 hbb(汉堡包)
数据结构 hbb(汉堡包) 问题描述 汉堡包有收集汉犇犇的癖好,它喜欢把汉犇犇一个叠一个的放置. 因为它有强迫症,所以每当它想放一个新的汉犇犇进去的时候并不一定想直接叠在最上面,简单的说,当他想放第 ...
- 【实习项目记录】(四)Android 实现手机验证时,按钮倒计时60s
手机注册一般都会有一个按钮,默认显示获取验证码,点击之后变成xx秒之后重新获取验证码 在网上查到有两种方法可以实现这种功能,一种是自定义一个timeButton,另外一种是利用封装好的60秒获取验证码 ...
- jqueue使用ajax方式
1.get: $.ajax({ type: "GET", url: baseUrl + "Showcontent/del_user?type=1&id=" ...
- 正经学C#_表达式与其运算符[赋值运算符]:《c#入门经典》
上一节中介绍了算术运算符,算术运算符的优先级. 今天说说赋值运算符,不陌生,=[等号]就是赋值运算符的一种. 除此之外还有好多种的.见下图. 运算符 类别 描述 实例 = 二元 简单的赋值运算符,把右 ...
- bootstrap学习(四)输入框、导航
输入框组: 基本用法: //form-control 占满 //input-group:输入框组//input-group-addon:输入框前加入一个前缀 <div class="i ...
- [转]10分钟梳理MySQL知识点:揭秘亿级高并发数据库调优与最佳实践法则
转:https://mp.weixin.qq.com/s/RYIiHAHHStIMftQT6lQSgA 做业务,要懂基本的SQL语句: 做性能优化,要懂索引,懂引擎: 做分库分表,要懂主从,懂读写分离 ...
- bzoj 1013: [JSOI2008]球形空间产生器sphere【高斯消元】
n+1个坐标可以列出n个方程,以二维为例,设圆心为(x,y),给出三个点分别是(a1,b1),(a2,b2),(a3,b3) 因为圆上各点到圆心的距离相同,于是可以列出距离方程 \[ (a1-x)^2 ...
- Oracle复制表
Oracle复制表分为只复制表结构或者结构和数据均复制两种: 只复制表结构 create table newTableName as select * from oldTableName where ...