c++--利用数组实现对批量数据的处理

数组

  • 概念
    1. 数组是具有一定顺序关系的若干相同类型变量的集合体,组成数组的变量称为该数组的元素。
    2. 数组属于构造类型。
    3. C++中数组没有长度变量(length)

一维数组

  • 声明:

    类型说明符 数组名[常量表达式];

    例如:
    int a[10];

  • 使用

  1. 先声明,后使用
  2. 只能逐个引用数组元素,而不能一次引用整个数组

a[0]=a[5]+a[7]+a[2*3];

  • 一维数组的存储顺序

数组元素在内存中顺序存放, 它们的地址是连续的。
在这里插入图片描述

  • 一维数组的初始化

  1. 在声明数组时对数组元素赋初值

    int a[10]={0,1,2,3,4,5,6,7,8,9};

  2. 可以只给一部分元素赋初值,其余为默认值

    int a[10]={0,1,2,3,4};

  3. 对全部数组元素赋初值时,可以不指定数组长度。

    int a[]={0,1,2,3,4,5,6,7,8,9};

二维数组

  • 二维数组的声明

    数据类型 标识符[常量表达式1][ 常量表达式2]

    int a[3][4];
    在这里插入图片描述

  • 二维数组的存储

按行存放,上例中数组a的存储顺序为:
a

  • 二维数组的初始化

若对所有元素都初始化,则数组第一维长度可以不指定,但是第二维必须指定

  1. 将所有数据写在一个{}内,按顺序赋初值

    int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

  2. 分行给二维数组赋初值

    int a[3][4]={{1,2,3,4},{5,6,7,8,},{9,10,11,12} };

  3. 对部分元素赋初值

    int a[3][4]={{1},{0,8},{0,1,2}};

数组作为函数参数

  • 数组元素作实参,与单个变量一样。
  • 数组名作参数,形、实参数都应是数组名,类型要一样,传送的是数组首地址。
  • 对形参数组的值进行改变会直接影响到实参数组。
  • 用数组元素作为实参

    将数组元素的值传给形参变量。
  • 用数组名作为实参

    若函数实参为数组名,形参应该也为数组名,也可以是指针变量,用于接收实参传递的地址。
    数组名代表数组首元素的地址,并不代表数组所有元素
    在这里插入图片描述

字符数组

用来存放字符数据的数组
一个元素存放一个字符

  • 初始化:

    与数组的初始化相同

    1. 单个赋值
    char c[4];
    c[0]='y';
    c[1]=' ';
    c[2]='s';
    c[3]='g';
    2. 用{}全部赋值
    char c[4]={'y',' ' ,'s','g'};
    3. 赋值一部分,剩下的默认为空字符  '\0'
    char c[6]={'y',' ' ,'s','g'};
    
    • 赋值与引用

    1. 只能对字符数组的元素赋值,而不能用赋值语句对整个数组赋值

      char c[4];c[0]=‘y’;c[1]=’ ‘;c[2]=‘s’;c[3]=‘g’;//正确
      char c[4]={‘y’,’ ’ ,‘s’,‘g’}; //错误,不可一次性赋值,只有初始化才可以

    2. 不可以将两个相同类型和长度的数组相互赋值

      若存在两个相同类型和长度的数组a、b且b已经被初始化
      a=b; //错误,a,b代表首元素地址,地址不可以被赋值
      a[0]=b[0]; //正确

  • 字符串和字符数组

    一个字符数组可以存放字符串。但是可能长度会不一致。
    系统会对字符串所有字符的最后面加一个’\0’,作为结束符标志。

    String s=“hello yj”; //长度8
    char s2[]={‘h’,‘e’,‘l’,‘l’,‘o’,’ ',‘y’,‘j’};//长度9
    系统会对字符串转换的字符数组最后自动填补空字符‘\0’;

    可以用字符串常量来初始化字符数组。

    char s[]={“hello baby”};
    或者 char s[]=“hello baby” ;

  • 字符数组的输入输出

    1. 逐个字符输出输入。

    2. 整个以字符串形式输出输入。

      char a[20];
      cin>>a;
      cout<<a;//输出的字符不包括空字符

    3. 若字符组数长度大于字符串实际长度,输出遇到空字符结束。

    char a[10]=“china”;
    cout<<a;//只输出5个字符遇到‘\0’结束

  • 使用字符串处理函数

    加头文件 string或string.h

    1. 字符串连接函数 strcat
      函数原型:strcat(char[],const char[]);
      作用:将第二个字符数组中的字符串连接在前面字符数组的字符串后面,连接后的字符串存放在第一个数组中并返回。
    2. 字符串复制函数strcpy
      函数原型:strcpy(char[] ,const char[]);
      作用:把第二个数组中的字符串复制到第一个字符串数组中,第一个数组中内容被覆盖。
      1. 第一个参数必须是数组名,第二个参数可以是字符串数组或者字符串常量。
      2. 可以将第二个参数中的若干个字符复制到第一个字符串数组中
        strcpy(str,str2,3)//将str2中的前2个字符复制到str中,然后再加个’\0’。
    3. 字符串比较函数strcmp
      函数原型:strcmp(const char[],const char[]);
      作用:比较两个字符串大小,从第一个字符开始比较,谁在字符表前面谁小。
      ==:函数值为0;>;返会正整数;< 函数值为一负数。
    4. 字符串长度函数strlen
      函数原型:strlen (const char[]);
      作用:返会字符串实际长度,不包括‘\0’.

字符串

字符串变量

  • 定义
    必须先把string类库加载进来。
    #include <string>
    先定义后使用:
    string 变量名;
  • 赋值:
  1. 可以直接把字符串常量赋值给字符串变量

string s=“china”;

  1. 用另一个字符串变量给字符串变量赋值;

string s=s1;

  • 输入输出
    直接在输入输出语句中用字符数变量名。

cout<<s;

  • 字符串变量的运算

    1. 复制直接用赋值号

    string1=string2;

    1. 连接用加好

    string s1=“c++”;
    string s2=“is difficult”;
    s1=s1+s2;//输出:c++is difficult

    1. 比较直接用关系运算符
  • 字符串数组

可以用string定义字符串数组。

  1. 字符串数组的每个元素都是一个不定长的字符串
  2. 字符数组中每个元素的值只包含本身的值,不含空字符。

对象数组

  • 声明:
    类名 数组名[元素个数];
  • 访问方法:
    通过下标访问 数组名[下标].成员名
  • 初始化
    1. 数组中每一个元素对象被创建时,系统都会调用类构造函数初始化该对象
    2. 通过初始化列表赋值。

    例:Point A[2]={Point(1,2),Point(3,4)};

    1. 如果没有为数组元素指定显式初始值,数组元素便使用默认值初始化(调用默认构造函数)
  • 数组元素所属类的构造函数
    1. 不声明构造函数,则采用默认构造函数。
    2. 各元素对象的初值要求为相同的值时,可以声明具有默认形参值的构造函数。
    3. 各元素对象的初值要求为不同的值时,需要声明带形参的构造函数。
    4. 当数组中每一个对象被删除时,系统都要调用一次析构函数

关于内存地址

  • 内存空间的访问方式
    1. 通过变量名访问
    2. 通过地址访问
  • 地址运算符: &

    例:
    int var;
    则&var 表示变量var在内存中的起始地址
    int *p=&var;

猜你喜欢

转载自blog.csdn.net/qq_41498261/article/details/82913143