数组

2019-07-27  本文已影响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);
}

上一篇 下一篇

猜你喜欢

热点阅读