STL 容器和迭代器连载6_顺序容器的操作3

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

/*- ==========================================================
*     文件名  :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.2Visual 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<101v1.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和l1v1.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
//============================

转载于:https://my.oschina.net/u/186539/blog/59452

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463708.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hive三种调用方式

一、hive -e ‘sql语句’ &#xff08;shell命令&#xff09; 适合比较短的sql语句调用&#xff0c;优点是可以直接在shell中调用静音模式 -S 在执行HiveQL过程中&#xff0c;不在显示器输出MR的执行过程hive -S -e ‘sql语句’ > test.txt 将执行结果直接输入到本地文件 二…

vector的内存释放

1. vector容器的内存自增长 与其他容器不同&#xff0c;其内存空间只会增长&#xff0c;不会减小。先来看看"C Primer"中怎么说&#xff1a;为了支持快速的随机访问&#xff0c;vector容器的元素以连续方式存放&#xff0c;每一个元素都紧挨着前一个元素存储。设想一…

从程序语言排行榜来解读IT及Web的发展

预测行业的发展不能是凭空预测&#xff0c;而需要有根据。因为预测本身就是个不太准的事情&#xff0c;再没根据的话&#xff0c;那就更是浮云了。下面&#xff0c;我尝试从程序语言排行榜来解读一下IT的发展方向及Web的未来。《2012年4月份编程语言排行榜》全文见 http://news…

QT - 内存泄漏检测

一、安装vld-2.5.1-setup.exe 下载地址&#xff1a;https://archive.codeplex.com/?pvld 二、pro中添加头文件目录与库目录 INCLUDEPATH "C:\\Program Files (x86)\\Visual Leak Detector\\include"LIBS "C:\\Program Files (x86)\\Visual Leak Detector\\li…

C和C++混合编程(__cplusplus 与 external c 的使用)

第一种理解比如说你用C开发了一个DLL库&#xff0c;为了能够让C语言也能够调用你的DLL输出(Export)的函数&#xff0c;你需要用extern "C"来强制编译器不要修改你的 函数名。 通常&#xff0c;在C语言的头文件中经常可以看到类似下面这种形式的代码&#xff1a; #ifd…

Eclipse开发Android程序如何在手机上运行

http://www.cnblogs.com/plwang1990/archive/2011/07/04/2097757.htm android开发不论是在真机上调试还是最终发布到真机上都非常简单&#xff0c;过程如下&#xff1a; 1、安装usb驱动 手机要能与电脑相连&#xff0c;当然要安驱动了。效果就是你插入手机&#xff0c;电脑显示…

Python 字符串 String 内建函数大全(1)

关于 Python 的字符串处理相关的方法还是非常多的&#xff0c;由于我正在学习 Python&#xff0c;于是就把 Python 中这些混杂的用于 string 的函数总结出来&#xff0c;在自己忘记的时候便于查找&#xff0c;希望对于有类似需求的人有所帮助。 captalize() 函数 功能 将一个字…

表单PostGet两个长度限制问题的分析

一、问题起因在某项目释放后Bug统计的附件《释放后问题》里有&#xff1a; 问题 原因 分析 备注 CSV处理时&#xff0c;如果处理的主题数过多&#xff0c;发生URL参数上限的错误&#xff1b; 可变长度的参数通过URL方式传递&#xff0c;会造成这种潜在的错误发生。 1、属于2次…

poj 2096 , zoj 3329 , hdu 4035 —— 期望DP

题目&#xff1a;http://poj.org/problem?id2096 题目好长...意思就是每次出现 x 和 y&#xff0c;问期望几次 x 集齐 n 种&#xff0c;y 集齐 s 种&#xff1b; 所以设 f[i][j] 表示已经有几种&#xff0c;转移一下即可。 代码如下&#xff1a; #include<cstdio> #incl…

vector占用内存的释放

vector<int> v1; v1.push_back(9); {Vector<int>tmp v1;V1.swap(tmp); } 使用{ }的目的是让tmp退出{ }时自动析构。 标准解决办法&#xff1a; template < class T > void ClearVector( vector< T >&vt ) {vector< T > vtTemp; veTemp.swa…

[C++]MySQL数据库操作实例

由于课程大实验需要使用c操作MySQL数据库&#xff0c;经过一番研究终于成功实现VS2008中与MySQL的连接。环境设置&#xff1a;安装完MySQL之后&#xff0c;将安装目录中的include目录下的libmysql.lib文件拷到VS2008安装目录中的VC\lib\下&#xff0c;然后在项目-选项-c/c-常规…

JS面向对象编程实现

Function 在 中是一个很特殊的对象&#xff0c;其特殊性体现在它的多重身份。 Function 可以声明普通的函数&#xff0c;这一点和其他语言中的函数概念是相同的。除此以外&#xff0c;Function还可以用作类型的声明和实现、对象的构造函数&#xff0c;以及类引用。 Apply和Call…

android 界面布局 很好的一篇总结 【转】

布局&#xff1a; 在 android 中我们常用的布局方式有这么几种&#xff1a; 1.LinearLayout ( 线性布局 ) &#xff1a;(里面只可以有一个控件&#xff0c;并且不能设计这个控件的位置&#xff0c;控件会放到左上角) 线性布局分为水平线性和垂直线性二者的属性分别为&#xf…

MapInfo开发心得——控件篇

前阵做一个项目过程中&#xff0c;需要结合MapInfo进行地方展示开发&#xff0c;积累一点点心得与大家共享以下所有基于MapXtreme 6.6MapInfo提供了足够强大的WinForm地图空间&#xff0c;可以很方便地在VS中拖拉摆放。但如此强大的控件也带来了封闭性太强的问题。现在我们都接…

linux下epoll如何实现高效处理百万句柄的

开发高性能网络程序时&#xff0c;windows开发者们言必称iocp&#xff0c;linux开发者们则言必称epoll。大家都明白epoll是一种IO多路复用技术&#xff0c;可以非常高效的处理数以百万计的socket句柄&#xff0c;比起以前的select和poll效率高大发了。我们用起epoll来都感觉挺爽…

89个嵌入式相关概念,你懂了几个?

嵌入式、计算机的学习&#xff0c;最基础的就是弄清一些概念。嵌入式、计算机相关的概念很多&#xff0c;这次汇总整理一些&#xff1a;1. 操作系统&#xff08;Operating System&#xff0c;OS&#xff09;&#xff1a;是管理计算机硬件与软件资源的系统软件&#xff0c;同时也…

每天一个linux命令(lsof)

losf----系统级监控、诊断工具安装&#xff1a;yum install lsof格式&#xff1a;lsof [选项] [绝对路径文件名 | 其他参数]主要选项&#xff1a;D&#xff1a;递归查找除该路径下所有打开的文件[rootroot ~]# lsof D /usr/lib COMMAND PID USER FD TYPE DEVICE SIZE…

正确使用PresentModalViewController

Present ViewController Modally 一、主要用途 弹出模态ViewController是IOS变成中很有用的一个技术&#xff0c;UIKit提供的一些专门用于模态显示的ViewController&#xff0c;如UIImagePickerController等。弹出模态ViewController主要使用于一下这几种情形&#xff1a; 1、…

word 2007 中插入图片无法显示,只能显示底部一部分

故障现象 向正在编辑的Word文档中插入一个图形时&#xff0c;发现插入的图形只显示出了一部分。下半部分&#xff0c;图片上面有文字&#xff0c;还能输入文字和回车。好像图片在文字下面一样&#xff0c;就露出了一个底部。无论怎样调整都不能解决问题&#xff0c;如果用浮…

使用VLC转码,在HTML5页面播放实时监控

首先要获取摄像机品牌的RTSP地址&#xff1a; 如大华的是rtsp://user:pwdip:port/cam/ realmonitor?channel1&subtype0 海康的是rtsp://user:pwdip:port/MPEG-4/ch1/main/av_stream Html5 <video>并不支持rtsp,所以使用vlc进行转码,将rtsp转http流,这样<video&g…