1. 程式人生 > >C++之vector容器初學(二)——插入和刪除

C++之vector容器初學(二)——插入和刪除

插入操作:

理論知識

² vector.insert(pos,elem);   //pos位置插入一個elem元素的拷貝,返回新資料的位置。

² vector.insert(pos,n,elem);   //pos位置插入nelem資料,無返回值。

² vector.insert(pos,beg,end);   //pos位置插入[beg,end)區間的資料,無返回值 

簡單案例

vector<int> vecA;

vector<int> vecB;

vecA.push_back(1);

vecA.push_back(3);

vecA.push_back(5);

vecA.push_back(7);

vecA.push_back(9);

vecB.push_back(2);

vecB.push_back(4);

vecB.push_back(6);

vecB.push_back(8);

vecA.insert(vecA.begin(), 11); //{11, 1, 3, 5, 7, 9}

vecA.insert(vecA.begin()+1,2,33); //{11,33,33,1,3,5,7,9}

vecA.insert(vecA.begin() , vecB.begin() , vecB.end() ); //{2,4,6,8,11,33,33,1,3,5,7,9}

測試程式碼:

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

void printV(vector<int> &v)
{
	for (int i = 0; i < v.size();i++)
	{
		cout <<v[i]<< " ";
	}
	cout << endl;
}

//插入操作
void main1()
{
	vector<int> v1;
	v1.insert(v1.begin(),1);//在開始位置插入元素1
	printV(v1);
	v1.insert(v1.begin(),2,33);//在開始位置插入兩個33
	printV(v1);
	v1.insert(v1.begin(),v1.begin(),v1.end());//在開始位置插入整個區間元素
	printV(v1);
}


int main()
{
	
	cout << "插入操作:" << endl;
	main1();
	return 0;
}


vector的刪除

理論知識

² vector.clear(); //移除容器的所有資料

² vec.erase(beg,end);  //刪除[beg,end)區間的資料,返回下一個資料的位置。

² vec.erase(pos);    //刪除pos位置的資料,返回下一個資料的位置。

簡單案例:

刪除區間內的元素

vecInt是用vector<int>宣告的容器,現已包含按順序的1,3,5,6,9元素。

vector<int>::iterator itBegin=vecInt.begin()+1;

vector<int>::iterator itEnd=vecInt.begin()+2;

vecInt.erase(itBegin,itEnd);

//此時容器vecInt包含按順序的1,6,9三個元素。

假設 vecInt 包含1,3,2,3,3,3,4,3,5,3刪除容器中等於3的元素

for(vector<int>::iterator it=vecInt.being(); it!=vecInt.end(); )    //小括號裡不需寫  ++it

{

   if(*it == 3)

   {

        it  =  vecInt.erase(it);       //以迭代器為引數,刪除元素3,並把資料刪除後的下一個元素位置返回給迭代器。

         //此時,不執行  ++it;  

   }

   else

   {

       ++it;

   }

}

//刪除vecInt的所有元素

vecInt.clear(); //容器為空

測試程式碼:

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

void printV(vector<int> &v)
{
	for (int i = 0; i < v.size();i++)
	{
		cout <<v[i]<< " ";
	}
	cout << endl;
}


//刪除操作
void main2()
{
	vector<int> v1(10);
	for (int i = 0; i < v1.size(); i++)
	{
		v1[i] = i + 1;
	}
	printV(v1);
	v1.erase(v1.begin(),v1.begin()+4);//區間刪除
	printV(v1);
	v1.erase(v1.begin());//頭部刪除
	printV(v1);
	v1[0] = 23;
	v1[1] = 22;
	printV(v1);
	for (vector<int>::iterator it = v1.begin(); it != v1.end();)//刪除容器裡等於8的元素
	{
		if (*it == 8)
		{
			it = v1.erase(it);
		}
		else
			it++;
	}
	printV(v1);
}

int main()
{
	cout << "刪除操作:" << endl;
	main2();
	return 0;
}