1. 程式人生 > 其它 >C++ STL(三)vector容器

C++ STL(三)vector容器

5. vector容器

  • vector容器與陣列非常相似,也稱為單端陣列。不同之處在於,陣列是靜態空間,而vector可以動態拓展。其中動態拓展並不是在原空間之後續接新空間,而是找更大的記憶體空間,然後將原資料拷貝至新空間,釋放原空間。
  • vector容器的迭代器是支援隨機訪問的迭代器。

vector的建構函式

#include <iostream>
#include <string>
#include <vector>
using namespace std;

void printVector(vector<int> &v)
{
	for (vector<int>::iterator it = v.begin();  it != v.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}
// vector容器的構造
void test01()
{
	vector<int> v1;		// 預設無參構造
	for (int i = 0; i < 10; i++)
	{
		v1.push_back(i);
	}
	printVector(v1);

	// 通過區間的方式進行構造
	vector<int> v2(v1.begin(), v1.end());
	printVector(v2);

	// n個elem進行構造
	vector<int> v3(10, 2);	//10個2
	printVector(v3);

	// 拷貝構造
	vector<int> v4(v3);
	printVector(v4);

}
int main()
{
	test01();
	return 0;
}

vector賦值操作

#include <iostream>
#include <string>
#include <vector>
using namespace std;

void printVector(vector<int>& v)
{
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}
// vector的賦值
void test01()
{
	vector<int>v1;
	for (int i = 0; i < 10; i++)
	{
		v1.push_back(i);
	}
	printVector(v1);
    
	// 用等號賦值
	vector<int> v2;
	v2 = v1;
	printVector(v2);//把v1所有的元素賦值給v2
    
	// assign
	vector<int> v3;
	v3.assign(v1.begin(), v1.end());
	printVector(v3);
    
	//n個elem的方式進行賦值
	vector<int> v4;
	v4.assign(20, 6);
	printVector(v4);
}
int main()
{
	test01();
	return 0;
}

vector的容量和大小操作

void test01()
{
	vector<int>v1;
	for (int i = 0; i < 10; i++)
	{
		v1.push_back(i);
	}
	printVector(v1);
	
	//判斷容器是否為空
	if (v1.empty())		// 為真 代表容器為空
	{
		cout << "容器為空";	
	}
	else
	{
		cout << "容器不為空" << endl;
		cout << "v1的容量為:" << v1.capacity() << endl;
		cout << "v1的大小為:" << v1.size() << endl;
	}
	// 重新指定大小
	v1.resize(15);	//如果重新指定的比原來的長了,預設用0填充新的位置
	cout << "v1的大小為:" << v1.size() << endl;
	printVector(v1);
	v1.resize(20, 666);	//重新指定大小,用666填充新的位置
	printVector(v1);
	v1.resize(5);// 重新指定的大小比原來的短,則刪除超出的部分
	printVector(v1);
}

vector的插入和刪除

void test01()
{
	vector<int>v1;
	for (int i = 0; i < 10; i++)
	{
		// 尾插法插入資料
		v1.push_back(i);
	}
	printVector(v1);
	// 尾刪刪除資料
	v1.pop_back();
	printVector(v1);
	
	// 插入 第一個引數是迭代器
	v1.insert(v1.begin(), 100);
	printVector(v1);

	v1.insert(v1.begin(),2,666);	//插兩個666在迭代器前
	printVector(v1);

	//刪除
	v1.erase(v1.begin());
	printVector(v1);
	// 刪除指定區間
	v1.erase(v1.begin(),v1.begin()+5);
	printVector(v1);
	//清空容器
	v1.clear();
	printVector(v1);
}

vector資料存取

void test01()
{
	vector<int>v1;
	for (int i = 0; i < 10; i++)
	{
		// 尾插法插入資料
		v1.push_back(i);
	}
	for (int i = 0; i < v1.size(); i++)
	{
		// 利用[]來訪問容器中的元素
		cout << v1[i] << " ";
	}
	cout << endl;

	for (int i = 0; i < v1.size(); i++)
	{
		// 利用at()來訪問容器中的元素
		cout << v1.at(i) << " ";
	}
	cout << endl;

	// 獲取第一個元素
	cout << "第一個元素為" << v1.front() << endl;

	// 獲取最後一個元素
	cout << "最後一個元素為" << v1.back() << endl;
}