zoukankan      html  css  js  c++  java
  • C++动态申请一维数组和二维数组

    在平时的编程过程中,我们经常会用到数组来存放数据,我们可以直接申请足够大空间的数组来保证数组访问不会越界,但是即便这样,我们依然不能保证空间分配的足够,而且非常的浪费空间。有时候我们需要根据上面得到的值,或者手动输入的值来分配数组的大小,很多人都会用cin>>n;int a[n];这样是不对的,因为int a[n]是在编译阶段就要确定的,这个时候n不是个常量,编译器不知道如何分配,会报错。

    所以我们需要动态申请数组

    1、一维数组a[n]

    (1)用malloc申请

    int* a =(int*) malloc(n*sizeof(int));这样就动态申请了一个一维的a[n]的数组,具体的语法,主要应注意void*到int*的强制转换,以及malloc本身是不调用构造函数的,所以如果是自定义类型,不能用malloc申请。

    (2)用new申请

    int* a = new int[n];

    (3)用STL中的vector来申请

    vector类似于数组,但功能比数组强大,鉴于vector的特性,我们可以事先不指定大小,可以直接pushback

    2、二维数组a[m][n]

    (1)用malloc申请

    a = (int**)malloc(sizeof(int*)*m);这里首先开辟二维数组的行,接着再开辟二维数组的列

    for(int i = 0;i < m; i++)

    {

      *(a+i) = (int*)malloc(sizeof(int)*n);

    }

    (2)用new申请

    同样是先开辟行,int** p = new int*[m];然后开辟列

    for(int i = 0;i < m; i++)

    {

      a[i] = new int [n];

    }

    for(int i = 0;i < m; i++)最后释放空间资源

      delete[] a[i];

    delete[] a;

    (3)用vector来实现

    vector<vector<int> > a(m,vector<int>(n));

    这里要注意的是int后面的两个>要有空格,否则会被认为是重载<<,还有后面的列要用vector<int>(n)

  • 相关阅读:
    SPOJ 4487. Can you answer these queries VI splay
    Oracle Enterprise Linux 64-bit 下Oracle11g的监听配置改动及測试步骤
    欧拉函数
    安装Windows7步骤
    在Eclipse中执行、配置Hadoop
    java设计模式演示样例
    VC中获取窗体句柄的各种方法
    HTML5 Canvas中实现绘制一个像素宽的细线
    Java实现 蓝桥杯VIP 基础练习 Sine之舞
    Java实现 蓝桥杯VIP 基础练习 Sine之舞
  • 原文地址:https://www.cnblogs.com/mini-coconut/p/8655850.html
Copyright © 2011-2022 走看看