STL 容器和迭代器連載5_順序容器的操做2

/*- ==========================================================
*     文件名  :STL_con_ite_5.cpp
*     開發人員:袁培榮
*     當前版本:1.0.0.2595
*     建立時間:2012-05-23
*     修改時間:2012-05-23
*     功能說明:STL 容器和迭代器連載5_順序容器的操做2
*     版權說明:版權全部 袁培榮 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[])
{
    //在STL vector 介紹連載1-2-3中,咱們介紹了不能經過下標來添加元素,
    //又演示了用push_back(t)成員函數在vector末尾添加元素的方法
    //這裏,咱們來系統介紹向容器中添加元素的方法。
    
    //先定義三個容器:
    vector<int> v1(7,0);
    vector<int> v2(10,1);
    list<int> l1(5,2);
    
    //第一種方法:
    //push_back(t)成員函數在容器的末尾添加元素,返回類型爲void
    v1.push_back(20);//在v1的末尾加入一個元素,值爲20;
    //驗證:
    cout<<"第一種方法:"<<endl;
    cout<<"如今v1.size()="<<v1.size()<<endl;
    cout<<"如今v1的末尾元素值爲:"<<*(v1.end()-1)<<endl; //咱們要習慣於用迭代器
    
    //第二種方法:
    //push_front(t)成員函數在容器的前端添加元素,返回類型爲void
    //值得注意的是,這種方法只能用於list和deque容器
    l1.push_front(30);//在l1的前端加入一個元素,值爲20;
    //驗證:
    cout<<"第二種方法:"<<endl;
    cout<<"如今l1.size()="<<l1.size()<<endl;
    cout<<"如今l1的前端元素值爲:"<<*l1.begin()<<endl; 
    
    //以上方法都不能在容器任意位置添加元素
    //要實如今容器任意位置添加元素,就是用到insert成員函數
    //insert成員函數有三個重載版本,咱們一一介紹
    
    //第三種方法:
    //利用insert(p,t)重載成員函數
    //p是一個指向容器元素的迭代器,在這個元素的前面插入值爲t的元素
    //返回一個迭代器,指向新插入的元素。
    //在v1的第三個元素前面插入50,
    //v1.begin()+2 是一個迭代器,指向插入前v1的第3個元素
    //新插入的元素就是新的v1的第三個元素,就是v1[2]
    vector<int>::iterator iter1=v1.insert(v1.begin()+2, 50);
    //驗證:
    cout<<"第三種方法:"<<endl;
    cout<<"如今v1.size()="<<v1.size()<<endl;
    cout<<"如今v1的第3個元素值是(方法1輸出):"<<*iter1<<endl;
    cout<<"如今v1的第3個元素值是(方法2輸出):"<<v1[2]<<endl;
    
    //第四種方法:
    //利用insert(p,n,t)重載成員函數,實現一次插入多個相同的元素
    //p是一個指向容器元素的迭代器,在這個元素的前面插入n個值爲t的元素
    //返回void類型。
    v1.insert(v1.begin()+2, 3, 60);
    //驗證:
    cout<<"第四種方法:"<<endl;
    cout<<"如今v1.size()="<<v1.size()<<endl;
    cout<<"如今v1的第3個元素值是:"<<v1[2]<<endl;
    cout<<"如今v1的第4個元素值是:"<<v1[3]<<endl;
    cout<<"如今v1的第5個元素值是:"<<v1[4]<<endl;
    
    //第五種方法:
    //利用insert(p,b,e)重載成員函數,實現一次插入多個任意元素
    //p是一個指向容器元素的迭代器
    //b,e是分別指向另外一個容器中兩個不一樣或者相同的元素的迭代器
    //在p所指向的元素前面插入b到e左閉合區間內指向的元素
    //返回void類型。
    //爲便於區分先調整v2中的第7,8,9三個元素的值
    v2[6]=6;
    v2[7]=7;
    v2[8]=8;
    //把這三個元素插入到v1的第3個元素前面
    v1.insert(v1.begin()+2, v2.begin()+6, v2.begin()+9);
    //注意,插入區間爲[v2.begin()+6, v2.begin()+9) 
    //即[v2[6],v2[9]) 即插入v2[6],v2[7],v2[8]三個元素
    //左閉合區間的含義告訴咱們v2[9]不會被插入
    //驗證:
    cout<<"第五種方法:"<<endl;
    cout<<"如今v1.size()="<<v1.size()<<endl;
    cout<<"如今v1的第3個元素值是:"<<v1[2]<<endl;
    cout<<"如今v1的第4個元素值是:"<<v1[3]<<endl;
    cout<<"如今v1的第5個元素值是:"<<v1[4]<<endl;
    //仍是要強調,左閉合區間的含義是一個重點。
    
	//雖然第二種方法push_front(t)只支持list和deque容器
	//但咱們用第三種方法的一個特例就能和作到第二種方法一樣的效果:
	//例如:
	v1.insert(v1.begin(), 100); 
	//第三種方法雖然有返回值,但咱們不接收這個返回值是能夠的
	//驗證:
    cout<<"用第三種方法的特例實現第二種方法:"<<endl;
    cout<<"如今v1.size()="<<v1.size()<<endl;
    cout<<"如今v1的前端元素值爲:"<<*v1.begin()<<endl; 
	//這樣,咱們能夠爲不支持第二種方法的容器擴展這一種方法
	
    return 0;
}


//============================
//運行結果:
//============================
// 第一種方法:
// 如今v1.size()=8
// 如今v1的末尾元素值爲:20
// 第二種方法:
// 如今l1.size()=6
// 如今l1的前端元素值爲:30
// 第三種方法:
// 如今v1.size()=9
// 如今v1的第3個元素值是(方法1輸出):50
// 如今v1的第3個元素值是(方法2輸出):50
// 第四種方法:
// 如今v1.size()=12
// 如今v1的第3個元素值是:60
// 如今v1的第4個元素值是:60
// 如今v1的第5個元素值是:60
// 第五種方法:
// 如今v1.size()=15
// 如今v1的第3個元素值是:6
// 如今v1的第4個元素值是:7
// 如今v1的第5個元素值是:8
// 用第三種方法的特例實現第二種方法:
// 如今v1.size()=16
// 如今v1的前端元素值爲:100
//============================
相關文章
相關標籤/搜索