zoukankan      html  css  js  c++  java
  • C++ 用变量定义数组

    较早的编译器是不同意这样做的,所以一些书籍比方以Tc解说的书本都说数组的下标不能是变量。在vc6.0下亦是如此。

    只是在一些较新的编译器如dev c++已经支持了,例如以下代码不会报错

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 int main()
     4 {
     5 int a; int i;
     6 scanf("%d",&a);
     7 int c[a];
     8 for( i =0 ;i<a;i++)
     9 scanf("%d",&c[i]);
    10 for( i =0 ;i<a;i++)
    11 printf("%d",c[i]);
    12 }
    View Code

    如果想用变量定义数组有很多种方式

    首先可以使用指针:

    一维:

    1 cin>>n;
    2 
    3 int* a=new int[n];
    4 
    5    if ((a) == NULL)
    6 
    7     {
    8         //动态分配失败
    9     }    
    View Code

    可是new出来的一定不要忘了delete掉
    delete []a; // 正确的使用方法
    delete a; // 错误的使用方法
    后者相当于delete a[0],漏掉了另外n-1个对象。

    二维:

    1 //设有m行n列
    2 cin>>m>>n;
    3 int **a = new int* [m];
    4 for(int i = 0; i < m; i++)
    5 {
    6        a[i] = new int [n];
    7 }
    View Code

    这样就相当于产生了一个二维数组a[m][n]了,可是对于我们平时声明的数组a[m][n],a[i][j]=a[i*n+j],由于是连续的一片内存,而这样动态声明的数组随意的a[k]都是一个int*类型,即一个地址了,

    所以仅仅能a[i][j]或者*(*(a+i)+j)来訪问数组的元素,而不能a[i*n+j]这样转换着用。

    1 //释放内存:
    2 for(int i = 0; i < m; ++i)
    3 
    4 {
    5 
    6   delete []a[i];
    7 }
    8 delete []a;
    释放内存

    还有就是使用STL容器

    之所以动态声明数组,相比是大小不确定,声明太大了怕浪费空间,而vector就不用指定大小,当存的数据变多,自己主动扩大容量,比方如果vector默认大小是8,当你再往里存第9个元素时,容器自己主动扩容,变为16,16再不够用,扩为32,2倍2倍的增长,这样就依据须要扩容,不会浪费空间,也能够像普通数组那样直接指定vector的大小,总之普通数组能够的它都能够,普通数组没有的它更有。

    第一种方法

     1 #include <string.h>
     2 #include <vector>
     3 #include <iostream>
     4 #include <algorithm>
     5 using namespace std;
     6  
     7  
     8 int main()
     9 {
    10     int N=5, M=6; 
    11     vector<vector<int> > obj(N); //定义二维动态数组大小5行 
    12     for(int i =0; i< obj.size(); i++)//动态二维数组为5行6列,值全为0 
    13     { 
    14         obj[i].resize(M); 
    15     } 
    16  
    17     for(int i=0; i< obj.size(); i++)//输出二维动态数组 
    18     {
    19         for(int j=0;j<obj[i].size();j++)
    20         {
    21             cout<<obj[i][j]<<" ";
    22         }
    23         cout<<"
    ";
    24     }
    25     return 0;
    26 }

    第二种方法

     1 #include <string.h>
     2 #include <vector>
     3 #include <iostream>
     4 #include <algorithm>
     5 using namespace std;
     6  
     7  
     8 int main()
     9 {
    10     int N=5, M=6; 
    11     vector<vector<int> > obj(N, vector<int>(M)); //定义二维动态数组5行6列 
    12  
    13     for(int i=0; i< obj.size(); i++)//输出二维动态数组 
    14     {
    15         for(int j=0;j<obj[i].size();j++)
    16         {
    17             cout<<obj[i][j]<<" ";
    18         }
    19         cout<<"
    ";
    20     }
    21     return 0;
    22 }

    以上就是动态数组的定义方法啦。

  • 相关阅读:
    [大数据从入门到放弃系列教程]在IDEA的Java项目里,配置并加入Scala,写出并运行scala的hello world
    [大数据从入门到放弃系列教程]第一个spark分析程序
    Mac配置Scala和Spark最详细过程
    Mac配置Hadoop最详细过程
    [从零开始搭网站八]CentOS使用yum安装Redis的方法
    CentOS磁盘用完的解决办法,以及Tomcat的server.xml里无引用,但是项目仍启动的问题
    Mysql 删除重复数据只保留id最小的
    bootstrap媒体查询常用写法
    Arduino Uno 在win7 64位下的驱动问题
    VS项目模板文件位置
  • 原文地址:https://www.cnblogs.com/kpxy/p/9843698.html
Copyright © 2011-2022 走看看