2021-05-02 C++ learning day 6 一维数组定义等

34.一维数组定义方式

数组中的每个数据都是相同的数据类型;数组是由连续的内存位置组成的。

一维数组的三种定义方式:

1.数据类型 数组名[数组长度]

eg:int num[50];

//给数组中的元素赋值(数组元素下标从0开始索引)

    num[0] =1;

    num[1] =2;

    num[2] =3;

//输出数组中的元素

std::cout<<num[1]<<std::endl;

2.数据类型 数组名[数组长度] = {值1,值2,值3...}

eg:int num2[3] = {4,5,6};

3.数据类型 数组名[] = {值1,值2,值3...}

eg:int num3[] = {8,9,10};

使用第三种方法,定义数组时数组必须有初始长度

如果在初始化数据时,没有将数组中的元素全部初始化完,其余元素就会自动用0来填补


35.一维数组名

一维数组名的用途:

1.统计整个数组在内存中的长度;

代码:

int main() {

int arr[5] = {1,2,3,4,5};

    std::cout<<"整个数组占用内存空间为:"<<sizeof(arr)<<std::endl;

    std::cout<<"数组中每个元素占用内存空间为:"<<sizeof(arr[0])<<std::endl;

    std::cout<<"数组中元素个数为:"<<sizeof(arr)/sizeof(arr[0])<<std::endl;

}

运行结果:

整个数组占用内存空间为:20

数组中每个元素占用内存空间为:4

数组中元素个数为:5

2.可以获取数组在内存中的首地址;

代码:

std::cout<<"数组首地址为"<<arr<<std::endl;

std::cout<<"数组中第一个元素的地址为"<<arr<<std::endl;

std::cout<<"数组中第二个元素的地址为"<<&arr[1]<<std::endl;

运行结果:

数组首地址为0x7bfe00

数组中第一个元素的地址为0x7bfe00

数组中第二个元素的地址为0x7bfe04

数组名是一个常量(已经指向数组首地址),不可以赋值

demo1:五只小猪称体重。在一个数组中记录了五只小猪的体重,找出并打印最重的小猪体重

代码:

int main() {

int max =0;

    int arr[5] = {200,180,360,145,414};

    for (int i =0; i <5; i++) {

if (arr[i] > max)

max = arr[i];

    }

std::cout<<"最重的小猪重达"<<max<<"斤"<<std::endl;

}

运行结果:

最重的小猪重达414斤


demo2:数组元素逆置。声明一个5个元素的数组,并将元素逆置。

代码:

int main() {

int arr[5] = {1,2,3,4,5};//逆置结果:5 4 3 2 1

    int j =1;

    int temp =0;

    for (int i =0; i <2; i++) {

temp = arr[i];

        arr[i] = arr[sizeof(arr)/sizeof(arr[0]) - j];

        arr[sizeof(arr)/sizeof(arr[0]) - j] = temp;

        j++;

    }

for (int j =0; j <5; j++) {

std::cout<<arr[j]<<std::endl;

    }

}

运行结果:

5

4

3

2

1

黑马程序员写的

代码:

int main() {

//1.创建数组

    int arr[5] = {1,2,3,4,5};//逆置结果:5 4 3 2 1

    std::cout<<"数组逆置前:"<<std::endl;

    for (int i =0; i <5; i++) {

std::cout<<arr[i]<<std::endl;

    }

//2.实现逆置

    //2.1 记录起始下标位置

    int start =0;

    //2.2 记录结束下标位置

    int end =sizeof(arr)/sizeof(arr[0]) -1;

    //2.5 循环执行2.1的操作 //2.3 起始下标与结束下标的元素互换

    while (start < end){

//2.3 起始下标与结束下标的元素互换

        int temp = arr[start];

        arr[start] = arr[end];

        arr[end] = temp;

        //2.4 起始位置++  结束位置--

        start++;

        end--;

    }

//3.打印逆置后的数组

    std::cout<<"数组逆置后:"<<std::endl;

    for (int i =0; i <5; i++) {

std::cout<<arr[i]<<std::endl;

    }

}

运行结果:

数组逆置前:

1

2

3

4

5

数组逆置后:

5

4

3

2

1



36.一维数组——冒泡排序

作用:最常用的排序算法,对数组内元素进行排序

1.比较相邻两个元素。如果第一个比第二个大。就交换他们两个

2.对每一对相邻元素做相同的工作,执行完毕后,找到第一个最大值

3.重复以上的步骤,每次比较次数 - 1,直到不需要比较

排序总轮数 = 元素个数 - 1;

每轮对比次数 = 元素个数 - 排序轮数 - 1;

代码:

int main() {

//利用冒泡排序实现升序序列

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

    std::cout<<"排序前:"<<std::endl;

    for (int i =0; i <9; i++) {

std::cout<< arr[i]<< "  ";

    }

std::cout<< std::endl;

    //开始冒泡排序

    //总共排序轮数 = 元素个数- 1

    for (int i =0; i <9 -1; i++) {

//内层循环对比 次数 = 元素个数 - 排序轮数- 1

        for (int j =0; j <9 - i -1; j++) {

//如果第一个数字比第二个数字大,交换这两个数字

            if (arr[j]  > arr[j +1]){

int temp =0;

                temp = arr[j];

                arr[j] = arr[j +1];

                arr[j +1] = temp;

            }

}

}

std::cout<<"排序后:"<<std::endl;

    for (int i =0; i <9; i++) {

std::cout<< arr[i]<< "  ";

    }

}

运行结果:

排序前:

4  2  8  0  5  7  1  3  9

排序后:

0  1  2  3  4  5  7  8  9

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 技术交流QQ群:1027579432,欢迎你的加入! 1.Cpp中的数组 C++支持数组数据结构,它可以存储一个固...
    CurryCoder阅读 5,561评论 0 1
  • 我在很多地方看到数组被当作指针,技术上来说这是不正确的,数组不是指针。那它是什么鬼?其实就跟其它C++变量一样,看...
    cppUncleSix阅读 3,942评论 0 0
  • #include using namespace std; //打印二维数组 void print(int arr...
    lxr_阅读 1,549评论 0 0
  • 题目描述: 给你一个整数数组 nums,将该数组升序排列。 上来的第一想法,居然就这么打卡成功了,哈哈哈哈哈哈哈哈...
    小逗比儿阅读 3,101评论 0 0
  • 1.关于读取字符串 在读取输入时,如果使用cin函数,仅能每次读取一个单词,因为该函数默认遇到空白(空格、换行、制...
    Leon_Geo阅读 1,886评论 0 0

友情链接更多精彩内容