跳至主要內容

Different

LincZero大约 2 分钟

Different

目录

容器类型

定义

数组定义

  • Java可以使用两种风格的定义方式

    • 区别

      • 数组长度不要求是常量
      • 创建一个数字数组时,所有元素都初始化为0;创建一个包含10个字符串的数组,所有字符串都为null,如果希望全是空串则循环填充
    • 定义

      int[] a;					// 风格1,Java风格,将类型和变量名分开了,更受Java程序员的喜爱
      int a[];					// 风格2,C风格
      int[] a = new int[100];		// new
      
      new int[] {1,2,3,4};		// 初始化一个匿名的数组,自动计数
      int[] a = new int[] {1,2,3};// 可以在不创建新变量的情况下重新初始化一个数组
      int[] a = {1,2,3,4};		// 简写形式
      
  • Cpp的定义

    • 区别

      • 数组长度要求是常量(stl中的vector等类则支持变长)
      • 需要= {0}自动填补后,所有元素才会初始化为0,否则内存随机、非常危险
    • 定义

      int a[4] = {1,2,3};			// 一般方法 + 自动填补
      int a[] = {1,2,3,4};		// 自动计数
      int a {1,2,3,4};			// 大括号初始化
      
  • Python的定义

    • 定义

      可以使用列表解析,非常方便

高级数组

普通数组的区别

  • C

    // C需要一开始就确定数组的大小
    int[] list_i = int[100]
    
  • Java

    // 在Java中,它允许在运行时确定数组的大小
    // 缺点:一旦确定了数组的大小,改变它就不太容易了
    int actualSize = ...;
    Employee[] staff = new Employee[actualSize];
    

泛型变成数组

  • Java

    • ArrayList:泛型变长数组

      ArrayList<Employee> staff = new ArrayList<Employee>();
      ArrayList<Employee> staff = new ArrayList<>(); 			// Java SE 7,“菱形”语法
      
  • C++

    • Array:泛型定长数组

      #include <array>
      std::array <typeName, N_ELEM> arr;
      
    • Vector等:泛型变长数组

      #include <vector>
      std::vector<doubel> vd(n);
      
  • 区别补充

    • ArrayList类似于C++的vector模板。ArrayList与vector都是泛型类型。 但是C++的vector模板为了便于访问元素重载了[]运算符。由于Java没有运算符重载,所以必须调用显式的方法
    • 此外,C++向量是值拷贝。如果a和b是两个向量,赋值操作a=b将会构造一个与b长度相同的新向量a,并将所有的元素由b拷贝到a,而在Java中,这条赋值语句的操作结果是让a和b引用同一个数组列表