跳至正文
View Categories

3 min read

主要内容 #

本节课,介绍几种数组相关的常用程序结构。

1. 数组的复制、拼接、裁剪、选择 #

在 C++ 中,数组的长度是固定的。
也就是说,一旦定义好数组以后,就不能在改变数组的大小

1.1 数组的复制 #

复制数组,只可以使用 逐个复制 的方式进行。

试一试:
假设数组 a 为 {1, 2, 3, 4},请定义合适大小的数组 c,并将 a 复制到 c。

/*
    请完成后,查看示例程序




*/

示例代码:

#include < iostream >
using namespace std;
int main()
{
    // 将 a 复制到 c
    int a[] = {1, 2, 3, 4};
    int c[4] = {};          // 必须在复制前,根据 a 的大小,初始化 c

    int size = sizeof(a)/sizeof(a[0]);
    for(int i=0; i < size; i++)
    {
        c[i] = a[i];        // 逐个复制
    }
    
    return 0;
}

1.2 数组的拼接 #

数组拼接,指的是将{1, 2, 3}和{4, 5}合并成{1, 2, 3, 4, 5}这样的操作。
需要使用复制来完成。

试一试:
假设数组 a 为 {1, 2, 3},b 为 {4, 5},请定义合适大小的数组 c,存放 a 和 b 拼接后的结果。

/*
    请完成后,查看示例程序




*/

示例代码:

#include < iostream >
using namespace std;
int main()
{
    // 将 a 和 b 拼接成 c
    int a[] = {1, 2, 3};
    int b[] = {4, 5};
    int c[5] = {};               // 在初始化的时候,需要确定 c 的大小


    // 先复制 a
    int sizeA = sizeof(a)/sizeof(a[0]);
    for(int i=0; i < sizeA; i++)
    {
        c[i] = a[i];             // 逐个复制
    }


    // 再复制 b
    int sizeB = sizeof(b)/sizeof(b[0]);
    for(int i=0; i < sizeB; i++)
    {
        c[sizeA + i] = b[i];     // 逐个复制,请注意这里 c 的 ID 变化。B 的元素要排列在 A 之后。
    }

    
    return 0;
}

1.3 数组的裁剪 #

裁剪,就是指删除数组中的指定元素。
这里有两种,第一是按区间裁剪,第二是给定序号裁剪。

1.3.1 按区间裁剪 #

试一试:
假设数组 a 为 {1,2,3,4,5,6,7,8,9},请裁剪第2到第4个元素(序号从 0 开始,第2和第4均不保留),将剩下的元素,保留在 c 中。

/*
    请完成后,查看示例程序




*/

示例代码:

#include < iostream >
using namespace std;
int main()
{
    int a[] = {1,2,3,4,5,6,7,8,9};

    // 确定删除后的数组大小 = 9-3 = 6
    int c[6] = {};                      // 在初始化的时候,需要确定 c 的大小
                                        // 【注意】中括号中,不可以填变量,这里要写数字或者常量(常量将在后续讲解)。


    int sizeA = sizeof(a)/sizeof(a[0]);
    int id_c = 0;                       // 请注意 c 的 id 变化
    for(int i=0; i < sizeA; i++)
    {
        // 创建裁剪规则
        if(2 <= i && i <= 4)            // 跳过第2到第4个元素
            continue;

        c[id_c] = a[i];                 // 逐个复制
        id_c++;                         // id_c 只在 c 被赋值后,才偏移一位
    }
    
    return 0;
}

同学们可以思考一下:
上面代码中的

    c[id_c] = a[i];                 
    id_c++;

等价于

    c[id_c++] = a[i];
1.3.2 给定序号裁剪 #

试一试:
假设数组 a 为 {1,2,3,4,5,6,7,8,9},请裁剪序号为{0,5,6,7}的元素,将剩下的元素,保留在 c 中。

/*
    请完成后,查看示例程序




*/

示例代码:

#include < iostream >
using namespace std;
int main()
{
    int a[] = {1,2,3,4,5,6,7,8,9};

    // 确定删除后的数组大小 = 9-4 = 5
    int c[5] = {};                      // 在初始化的时候,需要确定 c 的大小
                                        // 【注意】中括号中,不可以填变量,这里要写数字或者常量(常量将在后续讲解)。


    int sizeA = sizeof(a)/sizeof(a[0]);
    int id_c = 0;                       // 请注意 c 的 id 变化
    for(int i=0; i < sizeA; i++)
    {
        // 创建裁剪规则
        if(i == 0 || i == 5 || i == 6 || i == 7) 
            continue;                   // 跳过序号为{0,5,6,7}的元素

        c[id_c] = a[i];                 // 逐个复制
        id_c++;                         // id_c 只在 c 被赋值后,才偏移一位
    }
    
    return 0;
}

1.4 数组的选择 #

选择,就是指保留数组中的指定元素。其实这个和裁剪数组是类似的操作,只不过正好是相反的过程。

  • 裁剪:保留未被指定的元素
  • 选择:保留被指定的元素
  • 这里有两种,第一是按区间选择,第二是给定序号选择。

    1.4.1 按区间选择 #

    试一试:
    假设数组 a 为 {1,2,3,4,5,6,7,8,9},选择第2到第4个元素(序号从 0 开始,第2和第4均不保留),保留在 c 中。

    /*
        请完成后,查看示例程序
    
    
    
    
    */

    示例代码:

    #include < iostream >
    using namespace std;
    int main()
    {
        int a[] = {1,2,3,4,5,6,7,8,9};
    
        // 确定删除后的数组大小 = 3
        int c[3] = {};                      // 在初始化的时候,需要确定 c 的大小
                                            // 【注意】中括号中,不可以填变量,这里要写数字或者常量(常量将在后续讲解)。
    
    
        int sizeA = sizeof(a)/sizeof(a[0]);
        int id_c = 0;                       // 请注意 c 的 id 变化
        for(int i=0; i < sizeA; i++)
        {
            // 创建选择规则
            if(2 <= i && i <= 4)            // 保留第2到第4个元素
            {
                c[id_c] = a[i];             // 逐个复制
                id_c++;                     // id_c 只在 c 被赋值后,才偏移一位
            }
        }
        
        return 0;
    }
    1.3.2 给定序号选择 #

    试一试:
    假设数组 a 为 {1,2,3,4,5,6,7,8,9},请选择序号为{0,5,6,7}的元素,保留在 c 中。

    /*
        请完成后,查看示例程序
    
    
    
    
    */

    示例代码:

    #include < iostream >
    using namespace std;
    int main()
    {
        // 将 a 和 b 拼接成 c
        int a[] = {1,2,3,4,5,6,7,8,9};
    
        // 确定删除后的数组大小 = 4
        int c[4] = {};                      // 在初始化的时候,需要确定 c 的大小
                                            // 【注意】中括号中,不可以填变量,这里要写数字或者常量(常量将在后续讲解)。
    
    
        int sizeA = sizeof(a)/sizeof(a[0]);
        int id_c = 0;                       // 请注意 c 的 id 变化
        for(int i=0; i < sizeA; i++)
        {
            // 创建选择规则                  // 保留序号为{0,5,6,7}的元素
            if(i == 0 || i == 5 || i == 6 || i == 7) 
            {
                c[id_c] = a[i];             // 逐个复制
                id_c++;                     // id_c 只在 c 被赋值后,才偏移一位
            }
        }
        
        return 0;
    }

    习题 #

    课后练习