数组

作者: 波洛的汽车电子世界 | 来源:发表于2019-07-27 21:02 被阅读0次

!!!数组是一种类型, int[], double[]

一维数组

变量:内存中的一块空间
数组:内存中一块连续的空间

标识符,数组元素,元素下标,元素类型
!!!数组中的所有元素必须是相同数据类型。
数组长度在c++里可以是变量,在c里面不行。

int N =100;
int num[100];
num[0] = 999;

初始化一位数组,可以少给,不能多给,少给的元素初始值为0:

int num[5] = {1,2,3}
int num[] = {1,2} //长度为2

一维数组的动态赋值

#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int main()
{
  //动态地从键盘录入信息并赋值
  int num[7] = {8, 4, 2, 1, 23, 344, 12};
  int sum = 0;
  double avg = 0;
  cout << "数列是: ";
  for(int i=0; i < sizeof(num)/sizeof(int);i++)
  {
    cout << num[i] << endl;
    sum+=num[i];
  }
  avg  = (double) sum/sizeof(num);
  cout << endl;
  cout << "和:"<< sum <<endl;
  cout << "平均值:"<< avg <<endl;

return (0);
}

排序

冒泡排序是一个一个换,选择排序是比完一次换一次;

#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int main()
{




  //循环录入5个整型数字,进行降序排列后输出结果
  //方案1:使用冒泡排序
  //第一轮比较的次数是数组的总长度-1
  //下一轮比上一轮比较的次数:少一次
  //外层循环控制轮数
  //内层循环控制每轮的比较和交换

  int nums[]= {15,25,90,23,9};
  int numsLen = sizeof(nums)/sizeof(int);
  int temp;
  for (int i = 0; i < numsLen -1; i++)
  {  for (int j =0; j< numsLen -i -1;j++)
    {
      if(nums[j] < nums[j+1])
      {
      temp = nums[j];
      nums[j] = nums[j+1];
      nums[j+1] = temp;
      }

    }
  }
cout <<"冒泡排序的结果是"<<endl;
  for(int i = 0; i<5;i++){
    cout<< nums[i]<<",";
  }
  cout <<endl;
  

  //方案2: 选择排序
  // 第一步:找最小值,假设第一个元素是最小值
  //        第二个元素开始,一个一个比较
  // 第二步:假设第二个元素是最小值,第3个元素开始,一个一个比较
  //
  //擂台变量

  int nums[]= {15,25,90,23,9,9,6};
  int numsLen = sizeof(nums)/sizeof(int);
  int temp;
  int min = nums[0]; //假设最小值是数组的第一个元素
  int minIndex = 0; //最小值的初始下标为0

  for(int i =0;i<numsLen -1; i++)
  {
    min = nums[i];
    minIndex = i;
    for(int j =i + 1; j <=numsLen -1; j++)
    {
      //打擂台
      if(nums[j] < min)
      {
        min = nums[j];
        minIndex = j;
      }
    }
    //交换
    if(minIndex > i )
    {
      temp = nums[minIndex];
      nums[minIndex] = nums[i];
      nums[i] = temp;
    }
  }

  cout <<"选择排序的结果是"<<endl;
    for(int i = 0; i<numsLen;i++){
      cout<< nums[i]<<",";
    }
    cout <<endl;
//逆序
for(int i =0;i<numsLen/2;i++)
{
  temp = nums[i];
  nums[i] = nums[numsLen - i - 1];
  nums[numsLen - i - 1] = temp;

}
cout <<"逆序选择排序的结果是"<<endl;
  for(int i = 0; i<numsLen;i++){
    cout<< nums[i]<<",";
  }
  cout <<endl;


return (0);
}

数组的删除和输入

//插入以后,保证数组仍然是有序的
//1. 把新数字放在数组的末尾,重新进行排序
//2.找到第一个比插入数字大的位置insertIndex
// 从最后一个元素开始,将数字复制到后面一个元素中
//3. 将要插入的数字赋值给insertIndex

二维数组

二维数组的动态赋值

#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int main()
{
  //使用二维数组
  string stu_names[]={"Liu","Guan","Zhang"};
  string course_names[] = {"Chinese","Math","English"};
  const int ROW = 3; // sizeof(stu_names)/sizeof(stu_names[0])
  const int COL = 3;
  double scores[ROW][COL];
  for(int i = 0; i< ROW; i++ ) //外层循环控制学生
  {
    for(int j =0; j<COL; j++ ) //内层循环控制课程
    {
      cout << "The grades in " << course_names[j] <<" of "<<  stu_names[i]<< " is: " ;
      cin >> scores[i][j];

    }
  }
  //打印结果

  cout <<"\t";
  for(int i=0; i < COL;i++)
  {
    cout<<course_names[i]<<"\t";
  }
  cout <<endl;

  for(int i=0; i < ROW;i++)
  { cout<<stu_names[i]<<"\t";
    for(int j =0;j<COL;j++)
    {cout<<scores[i][j]<<"\t";}
    cout << endl;
  }

return (0);
}

数组的替代品

vector是一个快速地动态分配内存的数组(容器)
特点:

  1. 可以在运行阶段设置长度
  2. 可以索引元素
  3. 可以增删元素
    泛型编程(<>)
    定义:
    vector<double> vec1; //只能存放double 类型
    vector<string> vec2(5); // 可以存放不同类型
    vector<int>vec3(20,998)// 20个元素,每个元素都是998

例子:vector 和迭代器

#include <iostream>
/*
#include <ctime>
#include <cstdlib>
*/
#include<vector>
#include<algorithm>

using namespace std;

int main()
{
  vector <double> vecDouble = {98.5,67.4,33.3,32.9};
  //向数组中插入数字
  vecDouble.push_back(100.8); //在数组的尾部插入一个数字
  //遍历1
  //size 返回数组的大小
  for(int i = 0; i<vecDouble.size();i++)
  {
    cout << vecDouble[i] << endl;
  }
  //集合的通用遍历方法:使用迭代器iterator
  //以下是迭代器的基本用法!!!
  vector<double>::iterator it; //得到迭代器对象:实际上是一个指针对象
  // it.begin it.end返回元素的首位元素的迭代器
  for(it= vecDouble.begin();it!=vecDouble.end();it++)
  //运算符重载,it++,缺点是会导致缓存高
  {
    cout << *it <<endl;
  }

  //排序
  sort(vecDouble.begin(), vecDouble.end());
  //打印
  for(it= vecDouble.begin();it!=vecDouble.end();it++)
  {
    cout << *it <<endl;
  }
  //逆序
  sort(vecDouble.begin(), vecDouble.end());
  reverse(vecDouble.begin(), vecDouble.end());
  for(it= vecDouble.begin();it!=vecDouble.end();it++)
  {
    cout << *it <<endl;
  }

return (0);
}

相关文章

  • 数组

    数组数组数组数组数组数组数组数组数组

  • JavaScript - 5.数组<增删改查>

    数组 Array 数组 - 增 数组 - 删 / 改 数组 - 查 数组 - 自动 toString() 数组 -...

  • PHP数组使用

    数组定义 数组增、删、改 数组查询 数组排序 数组合并、分割 数组比较、去重复 数组长度 数组遍历 数组转换 其他...

  • 》》》PHP初入---(三)

    数组定义 1.索引数组:数组下标是整型的 声明数组: 访问数组: count(数组)--获取数组长度 查看数组所有...

  • JavaScript中数组的常用操作

    数组的遍历 数组的映射 数组的简化 数组的连接 获取数组的片段 数组的拷贝 查找数组 数组去重

  • JavaSE之数组

    六、数组 目录:数组概述、数组声明创建、数组使用、多维数组、Array类、稀疏数组 1.什么是数组 数组的定义:数...

  • Shell数组、关联数组

    数组 定义数组 获取数组 关联数组 定义关联数组 获取关联数组

  • 学习Java第五天

    数组是多个数据的集合 数组的语法 数组元素类型【】 数组名; 多维数组: 数组元素类型【】【】 数组名; 多维数组...

  • php基础精粹

    PHP php数组 php数组之索引数组初始化 PHP数组之索引数组赋值 PHP数组之访问索引数组内容 PHP数组...

  • C语言的惯用集

    数组部分 数组部分 清空数组a 把数据读进数组a 对数组a求和

网友评论

      本文标题:数组

      本文链接:https://www.haomeiwen.com/subject/mgfyrctx.html