/*- ========================================================== * 文件名 :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 //============================