日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Vector容器的系列操作( 詳解 )

作者:比特冬哥 更新時間: 2022-07-18 編程語言

文章目錄

  • 一、Vector容器簡介
  • 二、基本操作
  • 三、代碼實現
    • 1. 構造函數
    • 2. 賦值
    • 3. 插入和刪除
    • 4. 容量和大小
    • 5. 數據存取
    • 6. 預留空間
    • 7. 互換容器


一、Vector容器簡介

vector是 C++ 標準模板庫 中的部分內容,中文偶爾譯作“容器”,但并不準確。 它是一個多功能的,能夠操作多種數據結構和算法的模板類和函數庫。 vector之所以被認為是一個容器,是因為它能夠像容器一樣存放各種類型的對象,簡單地說,vector是一個能夠存放任意類型的 動態數組 ,能夠增加和壓縮數據。

容器特性

  1. 順序序列
    順序容器中的元素按照嚴格的線性順序排序??梢酝ㄟ^元素在序列中的位置訪問對應的元素。

  2. 動態數組
    支持對序列中的任意元素進行快速直接訪問,甚至可以通過指針算述進行該操作。提供了在序列末尾相對快速地添加/刪除元素的操作。

  3. 能夠感知內存分配器的(Allocator-aware)
    容器使用一個內存分配器對象來動態地處理它的存儲需求。

二、基本操作

  1. 構造函數
//   vector<T> v;                     采用模板實現類實現,默認構造函數 
//   vector(v.begin(),v.end());       將v[begin(),end())區間中的元素拷貝給本身 
//   vector(n,elem);                  構造函數將n個elem拷貝給本身 
//   vector(const vector &vec);       拷貝構造函數 

  1. 賦值
//總結:vector賦值方式比較簡單,使用operator=或者assign都可以 
//  給vector容器進行賦值
// vector &operator=(const vector &vec);   重載等號操作符 
// assign(beg,end);        將[begin(),end())區間中的數據拷貝賦值給本身 
// assign(n,elem);         將n個elem拷貝賦值給本身 
  1. 插入和刪除
//  push_back(ele);   尾部插入元素ele 
//  pop_back();       刪除最后一個元素 
//  insert(const_iterator pos,ele);       迭代器指向位置pos插入元素ele 
//	insert(const_iterator pos,int count,ele);     迭代器指向位置pos插入count個元素ele 
//	erase(const_iterator pos);     刪除迭代器指向的元素 
//  erase(const_iterator start,coust_iterator end);    刪除迭代器從start到end之間的元素 
// 	clear();       刪除容器中所有元素 
  1. 容量和大小
// empty();    判斷容器是否為空 
// capacity();  容器的容量 
// size();    返回容器中元素的個數 
// resize(int num);  重新指定容器的長度為num,若容器變長,則以默認值填充新位置
//                                            若容器變短,則末尾超出容器長度的元素被刪除 
// resize(int num,elem);   重新指定容器的長度為num,若容器變長,則以elem值填充新位置
//                                                  若容器變短,則末尾超出容器長度的元素被刪除 
  1. 數據存取
// at(int idx);    返回索引idx所指的數據   
// operator[];     返回索引idx所指的數據 
// front();        返回容器中第一個數據元素 
// back();         返回容器中最后一個數據元素 
  1. 預留空間
//總結:   如果數據量較大時,可以一開始利用reserve 預留空間 
        
//減少vector在動態擴展容量時的擴展次數 
//  reserve(int len);  容器預留len個元素長度,預留位置不初始化,元素不可訪問 
  1. 互換容器
//  swap(vwc);   將vec與本身的元素互換 

三、代碼實現

1. 構造函數

void printVector(vector<int> &p)
{
	for(vector<int>::iterator it=p.begin();it!=p.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());     //將v1的值賦給v2 
	printVector(v2);
	
//n個elem方式構造
	vector<int> v3(10,100);        //將10個為100的數值 賦給v3
	printVector(v3);
	
//拷貝構造
	vector<int> v4(v3);          //將v3的值拷貝給v4 
	printVector(v4); 
} 

2. 賦值

void printVector(vector<int> &p)
{
	for(vector<int>::iterator it=p.begin();it!=p.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);
	
//賦值 operator=
	vector<int> v2;
	v2=v1; 
	printVector(v2);
	
//assign
	vector<int> v3;
	v3.assign(v1.begin(),v1.end());    //利用assign區間方式(左閉右開)  將v1賦值給v3    
	printVector(v3);
	
//n個elem方式賦值
	vector<int> v4;
	v4.assign(10,100);        //10個100賦值給v4 
	printVector(v4); 
} 

3. 插入和刪除

void printVector(vector<int> &p)
{
	for(vector<int>::iterator it=p.begin();it!=p.end();it++)
	{
		cout<<*it<<" ";
	}
	cout<<endl;
}


//vector 容器進行插入、刪除操作 
void test01()
{
	vector<int> v1;  //默認構造

//尾插
	v1.push_back(10); 
	v1.push_back(20); 
	v1.push_back(30); 
	v1.push_back(40); 
	v1.push_back(50); 
//遍歷
	printVector(v1);
	
//尾刪
	v1.pop_back();
	printVector(v1);
	
//插入    第一個參數是迭代器
	v1.insert(v1.begin(),100);      //在開頭位置插入100
	printVector(v1);
	
	v1.insert(v1.begin(),2,1000);      //在開頭位置插入兩個1000
	printVector(v1);
	
//刪除   參數是迭代器
	v1.erase(v1.begin());     //刪除開頭第一個元素
	printVector(v1);
	
//清空
//	v1.erase(v1.begin(),v1.end());     //刪除從開頭到最后一個元素
	v1.clear(); 
	printVector(v1);

} 

4. 容量和大小

void printVector(vector<int> &p)
{
	for(vector<int>::iterator it=p.begin();it!=p.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);
	
	if(v1.empty())    //為真 代表容器為空
	{
		cout<<"v1為空"<<endl;
	}
	else
	{
		cout<<"v1不為空"<<endl;
		cout<<"v1的容量為:"<<v1.capacity()<<endl;
		cout<<"v1的大小為:"<<v1.size()<<endl;
	}
	
//重新指定大小
	v1.resize(15,100);     //利用重載版本,可以指定默認填充值  這里設定的大小長度為15,長出的部分用100填充(不設定的話,默認用0填充) 
	printVector(v1);
	
	v1.resize(5);       //設定的大小長度為5 
	printVector(v1);   //如果重新指定的長度比原來短了,超出部分會刪除掉 
} 

5. 數據存取

//對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;
	
	//利用at方式訪問元素
	for(int i=0;i<v1.size();i++)
	{
		cout<<v1.at(i)<<" ";
	} 
	cout<<endl;
	
	//獲取第一個元素
	cout<<"第一個元素為:"<<v1.front()<<endl;
	
	//獲取最后一給元素
	cout<<"最后一個元素為:"<<v1.back()<<endl; 

} 

6. 預留空間

void test01()
{
	vector<int> v;  
	
	//預留空間 
	v.reserve(10000);         //未加此行代碼前 num=15,即需要動態擴展十五次    加此行代碼只需要1次,即起預留作用 
	
	int num=0;
	int *p=NULL;
	for(int i=0;i<10000;i++)
	{
		v.push_back(i);
		if(p!=&v[0])
		{
			p=&v[0];
			num++;
		}
	}
	cout<<"num = "<<num<<endl;

} 

7. 互換容器

void printVector(vector<int> &p)
{
	for(vector<int>::iterator it=p.begin();it!=p.end();it++)
	{
		cout<<*it<<" ";
	}
	cout<<endl;
}


//vector 容器進行插入、刪除操作 
void test01()
{
	cout<<"交換前:"<<endl;
	vector<int> v1;  //默認構造
	for(int i=0;i<10;i++)
	{
		v1.push_back(i);
	}
	printVector(v1);
	
	vector<int> v2;  //默認構造
	for(int i=9;i>=0;i--)
	{
		v2.push_back(i);
	}
	printVector(v2);
	
	cout<<"交換后:"<<endl;
	v1.swap(v2);
	printVector(v1);
	printVector(v2);

} 

//實際用途
//巧用swap可以收縮內存空間 
void test02()
{
	vector<int> v;  
	for(int i=0;i<10000;i++)
	{
		v.push_back(i);
	}
	cout<<"最初時:"<<endl;
	cout<<"v的容量為:"<<v.capacity()<<endl;
	cout<<"v的大小為:"<<v.size()<<endl;	
	
	//重新指定大小
	cout<<endl<<"重新指定大小后:"<<endl; 
	v.resize(3);     
	cout<<"v的容量為:"<<v.capacity()<<endl;
	cout<<"v的大小為:"<<v.size()<<endl; 
	
	//巧用swap收縮內存
	cout<<endl<<"創建匿名對象進行交換后:"<<endl;
	vector<int>(v).swap(v);     //創建匿名對象進行交換,匿名對象最終會被系統自動釋放 
	cout<<"v的容量為:"<<v.capacity()<<endl;
	cout<<"v的大小為:"<<v.size()<<endl;
}

原文鏈接:https://blog.csdn.net/Dustinthewine/article/details/125815141

欄目分類
最近更新