STL 容器和迭代器連載6_順序容器的操做3

/*- ==========================================================
*     文件名  :STL_con_ite_6.cpp
*     開發人員:袁培榮
*     當前版本:1.0.0.2595
*     建立時間:2012-05-24
*     修改時間:2012-05-24
*     功能說明:STL 容器和迭代器連載6_順序容器的操做3
*     版權說明:版權全部 袁培榮 YuanPeirong 
*     編譯環境:Windows 7(x64) SP1 簡體中文專業版
*     編譯器:  Visual Studio 2010 SP1(中文旗艦版)
                MinGW 20120426 GNU GCC 4.6.2
                Visual C++ 6.0 SP6(中文企業版)
- ==========================================================*/

#include <iostream>
#include <vector>
#include <list>
#include <deque>
#include <string>

using std::cout;
using std::endl;
using std::vector;
using std::list;
using std::deque;
using std::string;

int main(int argc, char* argv[])
{
    //下面來介紹刪除容器內元素的相關操做
	
	//先定義一個容器,並添加101個元素。
	vector<int> v1;
	for(int i=0; i!=101; i++) //C++程序員習慣於用i!=101,而不是i<101
	    v1.push_back(i);
	cout<<"在全部刪除操做前v1.size()="<<v1.size()<<endl;
	
	//第一種方法:
	//erase(p) :刪除迭代器p所指向的元素
	//返回指向被刪除元素的下一位置的迭代器。
	//注意:p必須真實地指向實際存在的元素。
	cout<<"第一種方法:"<<endl;
    cout<<"刪除前v1的第96個元素值是(方法1輸出):"<<*(v1.begin()+95)<<endl;
    cout<<"刪除前v1的第96個元素值是(方法2輸出):"<<v1[95]<<endl;
	//咱們把第96個元素刪除
	vector<int>::iterator iter1=v1.erase(v1.begin()+95);
	//驗證:
    cout<<"刪除後v1.size()="<<v1.size()<<endl;
    cout<<"刪除後v1的第96個元素值是(方法1輸出):"<<*iter1<<endl;
    cout<<"刪除後v1的第96個元素值是(方法2輸出):"<<v1[95]<<endl;
	
	//第二種方法:
	//erase(b,e) :刪除迭代器b,e所指向的元素造成的左閉合區間
	//返回指向被刪除的最後一個元素的下一位置的迭代器。
	cout<<"第二種方法:"<<endl;
    cout<<"刪除前v1的第81個元素值是:"<<*(v1.begin()+80)<<endl;
	cout<<"刪除前v1的第82個元素值是:"<<*(v1.begin()+81)<<endl;
	cout<<"刪除前v1的第83個元素值是:"<<*(v1.begin()+82)<<endl;
	//咱們把第81,82,83三個元素刪除
	iter1=v1.erase(v1.begin()+80, v1.begin()+83);
	//驗證:
    cout<<"刪除後v1.size()="<<v1.size()<<endl;
	cout<<"刪除後v1的第81個元素值是(方法1輸出):"<<*iter1<<endl;
    cout<<"刪除後v1的第81個元素值是(方法2輸出):"<<*(v1.begin()+80)<<endl;
	cout<<"刪除後v1的第82個元素值是:"<<*(v1.begin()+81)<<endl;
	cout<<"刪除後v1的第83個元素值是:"<<*(v1.begin()+82)<<endl;
	
	//第三種方法:
	//pop_back() 刪除容器的最後一個元素,返回void類型
	cout<<"第三種方法:"<<endl;
	cout<<"刪除前v1的最後一個元素值是:"<<*(v1.end()-1)<<endl;
	if(v1.size()!=0)    //防止容器爲空時,刪除操做引起錯誤
	    v1.pop_back();
	//驗證:
    cout<<"刪除後v1.size()="<<v1.size()<<endl;
	cout<<"刪除後v1的最後一個元素值是:"<<*(v1.end()-1)<<endl;
	
	//第四種方法:
	//pop_front() 刪除容器的第一個元素,返回void類型
	//值得注意的是,這種方法只能用於list和deque容器
	list<int> l1(3,0);
	*l1.begin()=0;      //爲便於區分元素,將各修改爲不相同
	//下面指出修改list容器的元素時的兩種錯誤
	//l1[1]=1;           //list容器不支持l1[0]這樣的下標訪問(下面會講)
	//*(l1.begin()+2)=2; //list容器的迭代器不能與數值相加(複習一下前面)
	list<int>::iterator iter2=l1.begin();
	iter2++;             //迭代器的++操做是對全部容器都支持的
	*(iter2)=1;
	iter2++;
	*(iter2)=2;
	cout<<"第四種方法:"<<endl;
    cout<<"刪除前l1.size()="<<l1.size()<<endl;
	cout<<"刪除前l1的第一個元素值是:"<<*l1.begin()<<endl;
	if(!l1.empty())     //防止容器爲空時,刪除操做引起錯誤
	    l1.pop_front(); //empty()用來判斷容器是否爲空,下面會講
	//驗證:
    cout<<"刪除後l1.size()="<<l1.size()<<endl;
	cout<<"刪除後l1的第一個元素值是:"<<*l1.begin()<<endl;
	
    //雖然第四種方法pop_front(t)只支持list和deque容器
	//但咱們用第一種方法的一個特例就能和作到第二種方法一樣的效果:
	//例如:
	cout<<"用第一種方法的特例實現第四種方法:"<<endl;
    cout<<"刪除前v1.size()="<<v1.size()<<endl;
	cout<<"刪除前v1的第一個元素值是:"<<*v1.begin()<<endl;
	v1.erase(v1.begin());
	//驗證:
    cout<<"刪除後v1.size()="<<v1.size()<<endl;
	cout<<"刪除後v1的第一個元素值是:"<<*v1.begin()<<endl;
	//這樣,咱們能夠爲不支持第四種方法的容器擴展這一種方法
	
	//第五種方法:
	//clear() 刪除容器內的全部元素,返回void類型
	cout<<"第五種方法:"<<endl;
	cout<<"清空前v1.size()="<<v1.size()<<endl;
	cout<<"清空前l1.size()="<<l1.size()<<endl;
	//清空v1和l1
	v1.clear();
	l1.clear();
	//驗證:
	cout<<"清空後v1.size()="<<v1.size()<<endl;
	cout<<"清空後l1.size()="<<l1.size()<<endl;
	
	
	
    return 0;
}


//============================
//運行結果:
//============================
// 在全部刪除操做前v1.size()=101
// 第一種方法:
// 刪除前v1的第96個元素值是(方法1輸出):95
// 刪除前v1的第96個元素值是(方法2輸出):95
// 刪除後v1.size()=100
// 刪除後v1的第96個元素值是(方法1輸出):96
// 刪除後v1的第96個元素值是(方法2輸出):96
// 第二種方法:
// 刪除前v1的第81個元素值是:80
// 刪除前v1的第82個元素值是:81
// 刪除前v1的第83個元素值是:82
// 刪除後v1.size()=97
// 刪除後v1的第81個元素值是(方法1輸出):83
// 刪除後v1的第81個元素值是(方法2輸出):83
// 刪除後v1的第82個元素值是:84
// 刪除後v1的第83個元素值是:85
// 第三種方法:
// 刪除前v1的最後一個元素值是:100
// 刪除後v1.size()=96
// 刪除後v1的最後一個元素值是:99
// 第四種方法:
// 刪除前l1.size()=3
// 刪除前l1的第一個元素值是:0
// 刪除後l1.size()=2
// 刪除後l1的第一個元素值是:1
// 用第一種方法的特例實現第四種方法:
// 刪除前v1.size()=96
// 刪除前v1的第一個元素值是:0
// 刪除後v1.size()=95
// 刪除後v1的第一個元素值是:1
// 第五種方法:
// 清空前v1.size()=95
// 清空前l1.size()=2
// 清空後v1.size()=0
// 清空後l1.size()=0
//============================
相關文章
相關標籤/搜索