zoukankan      html  css  js  c++  java
  • C++动态分配空间

    先看一个例子,我在vs2010中运用

    template<class Weight,int graph_size> void Prim< Weight, graph_size>::getMinTree(Vertex source,Weight minTree[][graph_size])

    这种方法实现函数完全没错的,可是已=一转成vc6.0在编译时就出现 missing subscript 这种错误,真是越来越讨厌vc6.0了~~

    看来这种东西只能换成

    template<class Weight,int graph_size> void Prim< Weight, graph_size>::getMinTree(Vertex source,Weight **minTree)喽?

    不过,用这种方法的时候,就要注意C++动态分配内存了,下面是分配方法:

     

    首先要说的是new是C++中内建的操作符,具体用法见下面详解:

            那么看下面这个例子:

            int *p;

            p=new int(10);  

           在这个例子中首先定义个一个指向整型类型的指针,下面这句就是用new运算符给它分配内存空间。new后面的类型要跟上面定义一个指针指向的类型一致,而且空间中存储的就是整型变量10;

         实际上这个过程就相当于

            int p=10;

         那么有人就要问了,为什么不直接使用下面这个呢?其实答案是很明确的,因为用new可以动态的开辟内存空间,需要多少就可以开辟多少,这样可以在一定程度上减少静态数组对内存的浪费。

           这样我们就学会了如何使用new,而实际上我们才刚刚起步,那么咱们继续往下看!

           int *p;

           p=new int [10];

           在这里我们就是动态地分配了一个数组,我们要记住是怎么分配的:

          首先用new 说明是动态地区分配,下面紧接着的就是要分配的数据类型,然后一个方括号,里面就是想要分配类型的大小,这里跟数组分配时很相似!

         它就相当于:int p[10];

          呵呵 很简单吧??那我们就趁热打铁,看看二维数组是怎么动态地分配:

         int ** p;

         p=new int* [10];

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

               p[i]=new int[20];

        上面这一句就相当于:

       int p[10][20];

       下面我们就分析一下:

         int ** p;  //定义了一个指向int指针类型的指针;

         p=new int* [10];  //为p分配10个大小的int*类型的空间,代表10行。也就是说我给你分配的是指向整型类型的指针的空间,那么在我分配的空间里面只能装指针,其它的不能装!知道了这一点我们就继续往下看:

        for(int i=0;i<10;i++)     //for循环没什么说的吧

               p[i]=new int[20];   //这里p[i]就是刚才分配的空间,嘿嘿,然后再给它分配下一层空间,也就是20列

    那么我们这个就完成了!

        然后多维数组的分配方法跟二维殊途同归,掌握方法就行了!

  • 相关阅读:
    core dump相关
    编译与链接的问题
    shell和awk配合使用
    cybergarage-upnp
    miniupnpc
    openssl
    在 linux 下使用 CMake 构建应用程序
    Ubuntu下的多线程下载工具:MultiGet;并与 Firefox 建立关联 uget
    嵌入式web服务器-thttpd
    Android_Layout_xml布局
  • 原文地址:https://www.cnblogs.com/yiyi-xuechen/p/3452232.html
Copyright © 2011-2022 走看看