!!!数组是一种类型, 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是一个快速地动态分配内存的数组(容器)
特点:
- 可以在运行阶段设置长度
- 可以索引元素
- 可以增删元素
泛型编程(<>)
定义:
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);
}







网友评论