C++ Vectors詳解


Vectors包含着一系列連續存儲的元素,其行爲和數組類似。訪問Vector中的任意元素或從末尾添加元素都可以在常量時間複雜度內完成,而查找特定值的元素所處的位置或者是在Vector中插入元素則是線性時間複雜度
當Vectors空間不足時,會重新申請一段連續的空間並進行內存拷貝。

構造函數(constructors)

constrctor_1.cpp

#include <iostream>
//#include <Allocator>
#include <string>
#include <vector>
#include <iterator>
using namespace std;

int main()
{
	vector<int> vi;         //構造函數vector(const Allocator& = Allocator);
	vi.push_back(1);        //push_back插入元素在最後
	vi.push_back(2);        //push_back插入元素在最後
	vi.insert(vi.begin()+2,3);
	vi.insert(vi.begin()+3,4);
	vi.resize(6);
	vi[5] = 6;             //賦值
	vector<int>::iterator it = vi.begin();  //初始化迭代器
	cout << "迭代器輸出" << endl;
	while(it!=vi.end())
	{
		cout << *it << '\n';
		it++;
	}
	cout << endl;
	cout << "vi[]輸出" << endl;
	for(unsigned int i=0;i < vi.size();i++)
	{
		cout << vi[i] << endl;
	}
	cout << endl;
	cout << "vi.at()輸出" << endl;
	unsigned int j(0);
	do
	{
		cout << vi.at(j)<<endl;  //at(j)比使用vi[]更安全;
		j++;
	}while(j<vi.size());
	
	cout << endl;
	cout << "c++11輸出" << endl;
	for(auto n:vi)               //c++11新增加的for遍歷矢量
	{
		cout << n <<endl;
	}
	
	//C++11遍歷stl容器
	vector <string> vs = {"i","like","china"};
	for(auto & s : vs)
	{
		cout << s ;
	}
}

constructor_2.cpp

#include <iostream>
//#include <Allocator>
#include <string>
#include <vector>
typedef unsigned int uint;//typedef定義類型名
using namespace std;

int main()
{
	
	vector<string> str(5,"s");  //構造7個s的字符串,不能使用‘s’;
	for(uint i=0;i<str.size();i++)
	{
		cout << str.at(i) << endl;
	}
	/*輸出:
	s
	s
	s
	s
	s
	*/
	vector<uint> vui(6); //構造一個容量爲6的矢量
	for(uint i=0;i<vui.size();i++)
	{
		cout << vui.at(i) ;
	}
	//輸出:000000
	cout << "\n";
	double vdarr[] = {0.0,0.1,0.2,0.3,0.4};
	vector<double> vd(vdarr,vdarr+5);           //使用數組構造一個double的矢量
	vector<double> vd1(vd.begin(),vd.end()-1);    //使用矢量構造一個矢量
	for(uint i=0;i<vd.size();i++)
	{
		cout << vd[i] << " ";
	}
	cout <<endl;
	vector<double>::iterator it;//迭代器
	for(it=vd1.begin();it!=vd1.end();it++)
	{
		cout << *it << " "; 
	}
	getchar();
	system("pause");
	vector<double>vd2(vd1);  //深拷貝,元素相同,地址空間不同,而淺拷貝,傳參數
	vector<double>vd3 = vd1; 
}

assign函數

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

int main()
{
	vector<int> T1 = {1,2,3,4,5};
	vector<int> T2;
	T2.assign(T1.begin(),T1.end()-1);             //複製
	vector<int>::iterator it;//迭代器
	for(it=T2.begin();it!=T2.end()-1;it++)
	{
		cout << *it << " "; 
	}
	
	T2.assign(5,7);                           //替換爲5個7
	for(it=T2.begin();it!=T2.end();it++)
	{
		cout << *it << " "; 
	}
	//assign類似構造函數
} 

其他函數

函數 作用
at() 返回指定位置的元素
back() 返回最後一個元素
begin() 返回最後一個元素的迭代器
capacity() 返回vector所能容納的元素數量(在不重新分配內存的情況下)
clear() 清空所有元素
empty() 判斷是否爲空
end() 返回最後一個元素的次迭代器
erase() 刪除指定元素
front() 返回第一個元素
get_allocator() 返回vector的內存分配器
insert() 插入元素到vector中
maix_size() 返回vector所能容納的元素的最大數量
pop_back() 移除最後一個元素
rbegin() 返回vector尾部的逆迭代器
rend() 返回vector首部的逆迭代器

reserve()設置vector最小的元素容納數量
resize()|改變vector元素數量的大小
size()|返回vector元素數量的大小
swap()|交換兩個vector

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