從零開始學習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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章