zoukankan      html  css  js  c++  java
  • C++---数组

    数组

    • 数组是一个变量, 由数据类型相同的一组元素组成

    • 变量是内存中的一块空间, 而数组是内存中一块连续的空间

      image-20200502114219049

    数组结构

    • 数组的结构和基本元素

      • 标识符: 数组的名称, 用于区分不同的数组
      • 数组元素: 向数组中存放的数据
      • 元素下标: 对数组元素进行编号
      • 元素类型: 数组元素的数据类型
    • 数组只有一个名称, 即标识符, 用来表示数组的变量名

    • 元素下标标明了元素在数组中的位置, 从0开始

    • 数组中的每个元素都可以通过下标来访问

    • 数组长度固定不变, 避免数组越界

    一维数组

    定义

    语法: 数据类型 数组名[数组大小];

    int nums[25];
    char array_of_name[30];
    double curr_salary[35];
    
    const int N = 50;
    int emp_id[N];
    

    初始化

    //元素个数与声明的一致
    int years[6] = {2012, 2013, 2014, 2015, 2016, 2017}
    
    //后面5个元素未初始化, 默认值为0
    int months[12] = {1, 3, 4, 6, 7, 8, 9}
    
    //数组中元素个数为2
    int days[] = {1, 5};
    
    //错误定义, 未知元素个数
    int array[] = {};
    
    //C++11中的数组初始化, 可以省略=
    int days[]{1, 15};
    //大括号可以为空, 所有元素置为0
    float m[0]{};
    
    //求数组的长度
    sizeof(years)/sizeof(years[0])
    
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int nums_array[]{8, 4, 2, 1, 23, 344, 12};
    
        //数组的长度
        int len_array = sizeof(nums_array) / sizeof(nums_array[0]);
    
        int sum = 0;
    
        //循环输出数组的元素, 并计算数组中所有元素的和及平均值
        for(int i = 0; i < len_array; i++){
            cout << nums_array[i] << ' ';
            sum = sum + nums_array[i];
        }
        cout << endl;
        cout << "数组所有元素的和: " << sum << endl;
        cout << "数组所有元素的平均值: " << sum/len_array << endl;
    }
    

    冒泡排序

    //冒泡排序
    //第一轮比较的次数: 数组长度减一
    //下一轮比上一轮比较的次数: 少一次
    
    
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    
        const int N = 8;
        int nums[N]{24, 13, 7, 45, 11, 98, 9, 36};
        int temp;
    
        //外层循环控制比较的次数
        for(int i = 0; i < N - 1; i++){
    
            //内层循环控制每轮的比较和交换
            for(int j = 0; j < N - 1 - i; j++){
                if(nums[j] > nums[j + 1]){
                    temp = nums[j];
                    nums[j] = nums[j+1];
                    nums[j+1] = temp;
                }
            }
        }
    
        for(int i = 0; i < N; i++){
            cout << nums[i] << ' ';
        }
        cout << endl;
    }
    

    逆序

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        const int N = 8;
        int nums[N]{24, 13, 7, 45, 11, 98, 9, 36};
        int temp;
    
        //逆序
        for(int i = 0; i < N/2; i++){
            temp = nums[i];
            nums[i] = nums[N-1-i];
            nums[N-1-i] = temp;
        }
    
        for(int i = 0; i < N; i++){
            cout << nums[i] << ' ';
        }
        cout << endl;
    }
    

    二维数组

    //语法:  数据类型 数组名[行数][列数];
    
    double score[5][3];
    int animate[4][4];
    

    数组的替代-向量

    向量容器vector

    • 动态数组, 可以在运行阶段设置长度
    • 具有数组的快速索引方式
    • 可以插入和删除元素
    • 使用场景
      • 开始就知道元素的数量
      • 对数据的索引和随机访问频繁
      • 插入和删除大多数在尾端

    定义和初始化

    //定义一个向量容器
    vector<double> vec1;
    
    //定义一个长度为5的向量容器
    vector<string> vec2(5);
    
    //定义一个长度为20, 元素全部为998的向量容器
    vector<int> vec3(20, 998);
    

    常用操作

    方法 解释
    clear() 移除容器中所有的数据
    empty() 判断容器是否为空
    size() 返回容器中元素的个数
    [index], at[index] 返回索引为index的元素
    erase(pos) 删除pos位置处的数据
    erase(beg, end) 删除[beg, end)区间的数据
    front() 返回第一个元素
    insert(pos, el) 在pos处插入一个元素el
    pop_back() 删除最后一个元素
    push_back(el) 在容器末尾插入一个元素
    resize(num) 重新设置容器大小
    begin(), end() 返回容器首尾元素的迭代器
  • 相关阅读:
    测试代码
    内网与外网间通信[转]
    向微软首席执行官史蒂夫·鲍尔默致敬
    Spring Cloud OAuth2
    Docker搭建 MySQL 主从复制
    MySQL-查询结果缓存
    网页手机wap2.0网页的head里加入下面这条元标签,在iPhone的浏览器中页面将以原始大小显示,并不允许缩放
    Mybatis一对一关联查询
    application.Properties 自定义变量 注解@ConfigurationProperties使用方法
    Hibernate中的脏检查和缓存清理机制
  • 原文地址:https://www.cnblogs.com/KX-Lau/p/12818505.html
Copyright © 2011-2022 走看看