C++:快速上手vector動態數組

 vector是cpp中面向對象形式的動態數組,它不同於傳統數組,vector可以很方便的在數組的任意位置插入任意的數,並且使數組的大小隨之動態地發生改變。

 

1.vector<int> vec = { };                                    //初始化一個vector,vec爲數組名,vec[index]可以直接訪問數組中的任意元素

2.vec.push_back(____);                                 //在數組的最後插入一個新的元素

   vec.pop_back();                                           //刪去數組中的最後一個元素

3.vec.insert(____,____)                             //在數組中的某一個位置處插入一個新的元素

   vec.erase(_____);                                       //在數組中的某一個位置處刪除一個元素

4.vec.end()                                                     //數組中最後一個元素的後一個值

   vec.begin()                                                  //數組中的第一個元素

   vec.capacity()                                              //數組總的容量

   vec.size()                                                     //數組當前元素的個數

 

#include "stdafx.h"
#include <vector>
#include <iostream>
using namespace std;


int main()
{
	vector<int> vec = { 1,2,3,4 };
	cout << "Size is: " << vec.size() << endl;
	cout << "Capacity is: " << vec.capacity() << endl;
	for (unsigned int index = 0; index < vec.size(); ++index)
	{
		cout << vec[index] << endl;
	}
	
	//在末尾插入一個數字50,並觀察其size與capacity的變化:
	vec.push_back(50);
	cout << "Size is: " << vec.size() << endl;
	cout << "Capacity is: " << vec.capacity() << endl;
	for (unsigned int index = 0; index < vec.size(); ++index)
	{
		cout << vec[index] << endl;
	}
	/* 從結果中我們可以看出,在插入了一個數字之後,capacity的值增加了2,即從4變爲了6,而size的值
	增加了1從而變爲了5。 */


	//用第二種方式在末尾插入一個數字60,並觀察其size與capacity的變換:
	vec.insert(vec.end(), 60);
	cout << "Size is: " << vec.size() << endl;
	cout << "Capacity is: " << vec.capacity() << endl;
	for (unsigned int index = 0; index < vec.size(); ++index)
	{
		cout << vec[index] << endl;
	}
	/* 從結果中我們可以看出,再次插入一個值後,由於現在數的總量沒有超過之前capacity的值,故capcity
	的值並沒有增加,而size的值由於又有數值插入故加1 */
	
	//在開頭插入一個數字70,並觀察其size與capacity的變化:
	vec.insert(vec.begin(), 70);
	cout << "Size is: " << vec.size() << endl;
	cout << "Capacity is: " << vec.capacity() << endl;
	for (unsigned int index = 0; index < vec.size(); ++index)
	{
		cout << vec[index] << endl;
	}
	/* 從結果中我們可以看出,在數組的開頭插入一個70之後,現在數的總量又超過了之前capacity的值,故
	capacity的值擴充爲9,而size的值繼續加1 */

	//在尾部移除一個數值:
	vec.pop_back();
	cout << "Size is: " << vec.size() << endl;
	cout << "Capacity is: " << vec.capacity() << endl;
	for (unsigned int index = 0; index < vec.size(); ++index)
	{
		cout << vec[index] << endl;
	}

	//在尾部移除一個數值的另外一種方法:
	vec.erase(--vec.end());
	cout << "Size is: " << vec.size() << endl;
	cout << "Capacity is: " << vec.capacity() << endl;
	for (unsigned int index = 0; index < vec.size(); ++index)
	{
		cout << vec[index] << endl;
	}
	
	//在頭部移除一個數值:
	vec.erase(vec.begin());
	cout << "Size is: " << vec.size() << endl;
	cout << "Capacity is: " << vec.capacity() << endl;
	for (unsigned int index = 0; index < vec.size(); ++index)
	{
		cout << vec[index] << endl;
	}
	/* 從結果中我們可以看出來,在移除數值時,capacity的值不會再改變,即計算機給我們之前分配過的空
	間並不會被自動釋放掉。此外,vec.end()所指向的數值應是數組最後一位數的後一位,而vec.begin()所
	指向的數值應是數組第一位數,故當我們要刪除最後一位數時,刪除的對象應爲vec.end()-1。*/
}

程序運行結果:

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