STL 容器和迭代器连载5_顺序容器的操作2

  1 /*- ==========================================================
  2 *     文件名  :STL_con_ite_5.cpp
  3 *     开发人员:袁培荣
  4 *     当前版本:1.0.0.2595
  5 *     创建时间:2012-05-23
  6 *     修改时间:2012-05-23
  7 *     功能说明:STL 容器和迭代器连载5_顺序容器的操作2
  8 *     版权说明:版权所有 袁培荣 YuanPeirong 
  9 *     编译环境:Windows 7(x64) SP1 简体中文专业版
 10 *     编译器:  Visual Studio 2010 SP1(中文旗舰版)
 11                 MinGW 20120426 GNU GCC 4.6.2
 12                 Visual C++ 6.0 SP6(中文企业版)
 13 - ==========================================================*/
 14 
 15 #include <iostream>
 16 #include <vector>
 17 #include <list>
 18 #include <deque>
 19 #include <string>
 20 
 21 using std::cout;
 22 using std::endl;
 23 using std::vector;
 24 using std::list;
 25 using std::deque;
 26 using std::string;
 27 
 28 int main(int argc, char* argv[])
 29 {
 30     //在STL vector 介绍连载1-2-3中,我们介绍了不能通过下标来添加元素,
 31     //又演示了用push_back(t)成员函数在vector末尾添加元素的方法
 32     //这里,我们来系统介绍向容器中添加元素的方法。
 33     
 34     //先定义三个容器:
 35     vector<int> v1(7,0);
 36     vector<int> v2(10,1);
 37     list<int> l1(5,2);
 38     
 39     //第一种方法:
 40     //push_back(t)成员函数在容器的末尾添加元素,返回类型为void
 41     v1.push_back(20);//在v1的末尾加入一个元素,值为20;
 42     //验证:
 43     cout<<"第一种方法:"<<endl;
 44     cout<<"现在v1.size()="<<v1.size()<<endl;
 45     cout<<"现在v1的末尾元素值为:"<<*(v1.end()-1)<<endl; //我们要习惯于用迭代器
 46     
 47     //第二种方法:
 48     //push_front(t)成员函数在容器的前端添加元素,返回类型为void
 49     //值得注意的是,这种方法只能用于list和deque容器
 50     l1.push_front(30);//在l1的前端加入一个元素,值为20;
 51     //验证:
 52     cout<<"第二种方法:"<<endl;
 53     cout<<"现在l1.size()="<<l1.size()<<endl;
 54     cout<<"现在l1的前端元素值为:"<<*l1.begin()<<endl; 
 55     
 56     //以上方法都不能在容器任意位置添加元素
 57     //要实现在容器任意位置添加元素,就是用到insert成员函数
 58     //insert成员函数有三个重载版本,我们一一介绍
 59     
 60     //第三种方法:
 61     //利用insert(p,t)重载成员函数
 62     //p是一个指向容器元素的迭代器,在这个元素的前面插入值为t的元素
 63     //返回一个迭代器,指向新插入的元素。
 64     //在v1的第三个元素前面插入50,
 65     //v1.begin()+2 是一个迭代器,指向插入前v1的第3个元素
 66     //新插入的元素就是新的v1的第三个元素,就是v1[2]
 67     vector<int>::iterator iter1=v1.insert(v1.begin()+2, 50);
 68     //验证:
 69     cout<<"第三种方法:"<<endl;
 70     cout<<"现在v1.size()="<<v1.size()<<endl;
 71     cout<<"现在v1的第3个元素值是(方法1输出):"<<*iter1<<endl;
 72     cout<<"现在v1的第3个元素值是(方法2输出):"<<v1[2]<<endl;
 73     
 74     //第四种方法:
 75     //利用insert(p,n,t)重载成员函数,实现一次插入多个相同的元素
 76     //p是一个指向容器元素的迭代器,在这个元素的前面插入n个值为t的元素
 77     //返回void类型。
 78     v1.insert(v1.begin()+2, 3, 60);
 79     //验证:
 80     cout<<"第四种方法:"<<endl;
 81     cout<<"现在v1.size()="<<v1.size()<<endl;
 82     cout<<"现在v1的第3个元素值是:"<<v1[2]<<endl;
 83     cout<<"现在v1的第4个元素值是:"<<v1[3]<<endl;
 84     cout<<"现在v1的第5个元素值是:"<<v1[4]<<endl;
 85     
 86     //第五种方法:
 87     //利用insert(p,b,e)重载成员函数,实现一次插入多个任意元素
 88     //p是一个指向容器元素的迭代器
 89     //b,e是分别指向另一个容器中两个不同或者相同的元素的迭代器
 90     //在p所指向的元素前面插入b到e左闭合区间内指向的元素
 91     //返回void类型。
 92     //为便于区分先调整v2中的第7,8,9三个元素的值
 93     v2[6]=6;
 94     v2[7]=7;
 95     v2[8]=8;
 96     //把这三个元素插入到v1的第3个元素前面
 97     v1.insert(v1.begin()+2, v2.begin()+6, v2.begin()+9);
 98     //注意,插入区间为[v2.begin()+6, v2.begin()+9) 
 99     //即[v2[6],v2[9]) 即插入v2[6],v2[7],v2[8]三个元素
100     //左闭合区间的含义告诉我们v2[9]不会被插入
101     //验证:
102     cout<<"第五种方法:"<<endl;
103     cout<<"现在v1.size()="<<v1.size()<<endl;
104     cout<<"现在v1的第3个元素值是:"<<v1[2]<<endl;
105     cout<<"现在v1的第4个元素值是:"<<v1[3]<<endl;
106     cout<<"现在v1的第5个元素值是:"<<v1[4]<<endl;
107     //还是要强调,左闭合区间的含义是一个重点。
108     
109     //虽然第二种方法push_front(t)只支持list和deque容器
110     //但我们用第三种方法的一个特例就能和做到第二种方法同样的效果:
111     //例如:
112     v1.insert(v1.begin(), 100); 
113     //第三种方法虽然有返回值,但我们不接收这个返回值是可以的
114     //验证:
115     cout<<"用第三种方法的特例实现第二种方法:"<<endl;
116     cout<<"现在v1.size()="<<v1.size()<<endl;
117     cout<<"现在v1的前端元素值为:"<<*v1.begin()<<endl; 
118     //这样,我们可以为不支持第二种方法的容器扩展这一种方法
119     
120     return 0;
121 }
122 
123 
124 //============================
125 //运行结果:
126 //============================
127 // 第一种方法:
128 // 现在v1.size()=8
129 // 现在v1的末尾元素值为:20
130 // 第二种方法:
131 // 现在l1.size()=6
132 // 现在l1的前端元素值为:30
133 // 第三种方法:
134 // 现在v1.size()=9
135 // 现在v1的第3个元素值是(方法1输出):50
136 // 现在v1的第3个元素值是(方法2输出):50
137 // 第四种方法:
138 // 现在v1.size()=12
139 // 现在v1的第3个元素值是:60
140 // 现在v1的第4个元素值是:60
141 // 现在v1的第5个元素值是:60
142 // 第五种方法:
143 // 现在v1.size()=15
144 // 现在v1的第3个元素值是:6
145 // 现在v1的第4个元素值是:7
146 // 现在v1的第5个元素值是:8
147 // 用第三种方法的特例实现第二种方法:
148 // 现在v1.size()=16
149 // 现在v1的前端元素值为:100
150 //============================

 

posted @ 2012-05-23 23:19  天远  阅读(236)  评论(0)    收藏  举报

版权所有 © 2010-2020 YuanPeirong TianYuan All Rights Reserved. Powered By 天远