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() 返回容器首尾元素的迭代器
原文地址:https://www.cnblogs.com/KX-Lau/p/12818505.html