从零开始学习c++之一维、二维数组和vector的简单使用

数组:

C++中的数组和C中一样,数组大小不可更改,必须声明时确定数组大小,只有在初始化时才能一次性赋值,后续赋值只能按索引单个元素赋值;

数组虽然不够灵活,但效率很高,对于特定情况作用很大。

下面是数组的几种可行声明和初始化:

        int seconds[2] = { 1,2 };                     //一般声明
	int year[6] = { 2011,2012,2013,2014,2015 };  //数组内元素个数可以小于数组大小,少的部分默认为0,但不能大于数组大小
	int days[] = { 15,17,18 };        //会自动计算数组大小
	int months[]{ 1,2,4 };        //可以省略=

数组的增删查改:

        //声明数组
        double power[20];                 //数组的大小确定后不能再更改
	//power = { 1,2,3,4 };             //数组只有初始化是才能一次性赋值,后续赋值只能一个元素一个元素赋值
	int arrayLength = 0;                //当前存在非默认值的数组长度
	power[arrayLength++] = 3509;
	power[arrayLength++] = 2109;
	power[arrayLength++] = 2388;
	power[arrayLength++] = 6621;
	//升序排序(冒泡)
	double temp;
	for (int i = 0;i < arrayLength - 1;i++)
	{
		for (int j = 0; j < arrayLength -1-i; j++)
		{
			if (power[j]>power[j+1])
			{
				temp = power[j];
				power[j] = power[j + 1];
				power[j + 1] = temp;
			}
		}
	}
	for (int i = 0;i < arrayLength;i++)
	{
		cout << power[i] << "\t";
	}
//数组的插入
	//1.找到第一个比插入数字大的位置insertIndex
	double insertNum;         //要插入的数
	cout << "\nEnter a num to insert" << endl;
	cin >> insertNum;         //输入要插入的数
	int insertIndex = 0;         //要插入的元素下标
	for (int i = 0;i < arrayLength;i++)
	{
		if (power[i]>insertNum)
		{
			insertIndex = i;
			break;
		}
	}
        //2.从最后一个元素开始,将数字复制到后面一个元素中
	for (int i = arrayLength - 1;i >= insertIndex;i--)
	{
		//把前一个元素赋值给后一个元素
		power[i + 1] = power[i];
	}
	//3.将要插入的数字赋值给下标为insertIndex的元素
	power[insertIndex] = insertNum;
	//4.总长度+1
	arrayLength++;
	
	for (int i = 0;i < arrayLength;i++)
	{
		cout << power[i] << "\t";
	}
//数组的单个元素删除:
	//1.找到要删除的元素
	double deleteNum;            //要删除的值
	int deleteIndex = INT_MIN;
	cout << "\nEnter a num to delete" << endl;
	cin >> deleteNum;
	for (int i = 0;i < arrayLength;i++)
	{
		if (power[i] == deleteNum)
		{
			deleteIndex = i;
			break;
		}
	}	
	if (deleteIndex==INT_MIN)           //判断是否找到
	{
		cout << "Not found" << endl;
	}
	else
	{
		//2.从找到的下标开始,后面一个元素赋值给前面一个元素
		for (int i = deleteIndex;i < arrayLength-1;i++)
		{
			power[i] = power[i+1];
		}
		//3.总长度-1
		arrayLength--;
               //打印
		for (int i = 0;i < arrayLength;i++)
		{
			cout << power[i] << "\t";
		}
	}


二维数组:

二维数组可以理解为多个(行数)一维数组的集合,每一行的元素个数为列数

        string stdNames[] = { "小明","小张","小王" };
	string courseNames[]{ "语文","数学","英语" };
	const int ROW = 3;        //行数
	const int COL = 3;         //列数
	double scores[ROW][COL];    //声明二维数组
	//输入成绩
	for (int i = 0;i < ROW;i++)
	{
		for (int j = 0;j < COL;j++)
		{
			cout << stdNames[i] << "\t" << courseNames[j] <<":";
			cin >> scores[i][j];
		}
	}
	//打印最后成绩
	cout << endl<<"\t";
	for (int i = 0;i < COL;i++)       //打印一行课程名称
	{
		cout << courseNames[i]<<"\t";
	}
	for (int i = 0;i < ROW;i++)     //外层控制行
	{
		cout << "\n"<<stdNames[i]<<"\t";       //打印每一行的学生姓名
		for (int j = 0;j < COL;j++)   //内层控制列
		{
			cout << scores[i][j]<<"\t";
		}
		cout << "\n";     //每一行结束换行
	}

vector:

vector可以暂时简单理解为一个灵活的,可以自由改变大小的一个类似数组的容器

vector虽然灵活,但效率不如单纯数组,但相差不大,vector可以插入和删除元素

vector的声明和初始化:

        vector<double> v1;          //一般声明
	vector<int> v2(5);         //默认5个空间
	vector<int> v3(20, 90);       //默认20个元素,每个元素的值都是90
        v1 = { 1,2,2.3,5.6,2.2,77.2 };      //v1的赋值

vector的简单使用包括遍历和添加清空和排序:

        //1.一种原始遍历方法 把vector当数组一样使用
	for (int i = 0;i < v1.size();i++)              //v1.size(); 返回容器中元素个数
	{
		cout << v1[i]<<"\t" ;
	}
	cout << endl;
	v1.push_back(62.5);                            //在数组的末尾添加一个指定元素
	//2.集合的通用遍历方法,使用迭代器 iterator
	//iterator的使用方法
	vector<double>::iterator it1;                     //先限定iterator的类型(double),得到一个迭代器对象,实际是一个指针
	//默认从第一个元素开始迭代,到最后一个元素
	for (it1 = v1.begin();it1 != v1.end(); ++it1)         //++it1 迭代器特有特性 并且不会有缓存
	{
		cout << *it1 << "\t";                       //*it1 取得it1的地址,找到它的值并输出
	}
	//3.排序
	sort(v1.begin(),v1.end());                //需要使用头文件<algorithm>
	cout << endl;
	for (it1 = v1.begin();it1 != v1.end(); ++it1)         //++it1 迭代器特有特性 并且不会有缓存
	{
		cout << *it1 << "\t";                       //*it1 取得it1的地址,找到它的值并输出
	}
	reverse(v1.begin(), v1.end());            //逆序
        v1.clear();                             //清空vector



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值