关于 数组容器 中 erase()函数用例和原理

<img src="http://img.blog.csdn.net/20150411201447040?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHNncWpo/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />#include<iostream>
#include<vector>
using namespace std;
	vector<int>ls;
void gq()
{
	for(int i=0;i<10;i++)
		ls.push_back(i);
}

int main()
{
	cout<<ls.capacity()<<endl;//定义后容器占用内存大小
	gq();

	cout<<"ls.capacity()="<<ls.capacity()<<"ls.size()="<<ls.size()<<endl;

	ls.clear();
	for(int a=11;a<13;a++)
		ls.push_back(a);
	cout<<"ls.capacity()="<<ls.capacity()<<"ls.size()="<<ls.size()<<endl;//发现只是把容器size
	//置为0,并没有释放内存。

	for(int j=0;j<10;j++)//因为内存没释放 发现元素值没有变 并且clear()后,迭代器指向第一个元素
		cout<<ls[j]<<endl;//才有了 11 12 2 3——盖住了前两个元素。此时 ls。end()返回
	//指向12的迭代器。
     cout<<endl<<endl;

	ls.push_back(200);
		ls.push_back(100);

	vector<int>::iterator it=ls.begin()+3;
	for(;it!=ls.end();)//当地一个元素删除, 后面的元素整体前移,迭代器顺理成章指向第二个元素。
	{
	ls.erase(it);

	}
	//it自增1;

for(vector<int>::iterator iter=ls.begin();iter!=ls.end();iter++)
		cout<<"lingwai ="<<*iter<<endl;

cout<<"ls.capacity()="<<ls.capacity()<<"ls.size()="<<ls.size()<<endl;

	gq();

	vector<int>().swap(ls);//swap ,清除容器 ,并收回空间

	//for(int m=0;m<10;m++)//如果不注释,那么runtime error!
	//	cout<<ls[m]<<endl;
	cout<<"ls.capacity()="<<ls.capacity()<<"ls.size()="<<ls.size()<<endl;

	return 0;
}

时间: 2024-10-13 13:42:56

关于 数组容器 中 erase()函数用例和原理的相关文章

map中erase函数的使用

STL的map表里有一个erase方法用来从一个map中删除掉指令的节点eg:map<string,string> mapTest;typedef map<string,string>::iterator ITER; ITER iter=mapTest.find(key);mapTest.erase(iter); 像上面这样只是删除单个节点,map的形为不会出现任务问题,但是当在一个循环里用的时候,往往会被误用,那是因为使用者没有正确理解iterator的概念.像下面这样的一个例子

C++中erase函数的使用,可以用来删除内存擦除

erase函数的原型如下:(1)string& erase ( size_t pos = 0, size_t n = npos );(2)iterator erase ( iterator position );(3)iterator erase ( iterator first, iterator last );也就是说有三种用法:(1)erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符(2)erase(position);删除position处

C++ 在容器中存放函数指针

注意,对一般c++ 98标准编译器而言,容器泛型模板是不支持直接存放函数指针的.需要typedef将函数指针重命名. 比如,一个void返回值参数也为void的函数指针,需要 typedef void(*test)(void); 这样,test就可以当做函数指针模板类型添加到容器当中了. map<int, test> testMap; pair<int,test> p1 = make_pair(1,displayone); 以下示例代码简单的示范一下: #include<io

js数组容器中包含的属性和方法概述

1..length----获取数组长度: var arr = [1,2,3,4,5]; console.log(arr.length) //5 2.shift()----删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined,直接在元数组上修改: var arr= [1,2,3,4,5]; var result = arr.shift(); console.log(arr) //[2,3,4,5] console.log(result) //1 3.unshift()----

【转】vector中erase()的使用注意事项

vector::erase():从指定容器删除指定位置的元素或某段范围内的元素 vector::erase()方法有两种重载形式 如下: iterator erase(   iterator _Where); iterator erase(   iterator _First,   iterator _Last); 如果是删除指定位置的元素时: 返回值是一个迭代器,指向删除元素下一个元素; 如果是删除某范围内的元素时:返回值也表示一个迭代器,指向最后一个删除元素的下一个元素; 看下面的程序,目的

【图文】Excel中vlookup函数的使用方法

今天统计数据,用到了Excel中vlookup函数,第一次使用当然少不了百度,经过反复研究后,算是解决了问题,现整理成文档. 一.实现效果 Sheet1 Sheet2   注:上图中sheet1商品条码列(即D列)引用sheet2中商品条码(即B列)中的数据 二.vlookup函数调用说明 以sheet1中调用函数为例,如下: =VLOOKUP(A2,Sheet2!$A$2:$B$100,2,TRUE) 函数中共有四个调用参数 1)  第一个参数:A2 :可任意指定,也可以是B2.C2等.这一列

js中的函数,Date对象,Math对象和数组对象

函数就是完成某个功能的一组语句,js中的函数由关键字 function + 函数名 + 一组参数定义;函数在定义后可以被重复调用,通常将常用的功能写成一个函数,利用函数可以使代码的组织结构更多清晰. 其语法结构为 function funName (arg0, arg1, … argN){        //statements    } function say_hello (name, msg){ alert(“hello”+ name + “:”+ msg); } say_hello(“d

multiset容器erase函数的误用

<从缺陷中学习C/C++>第3章库函数问题,本章主要介绍库函数的使用中会遇到的问题.使用库函数可以降低软件开发的难度,提高代码编写的效率.本节为大家介绍multiset容器erase函数的误用. AD: 51CTO 网+ 第十二期沙龙:大话数据之美_如何用数据驱动用户体验 3.16  multiset容器erase函数的误用 代码示例 int main(){ multiset <int> c1; c1.insert(3); c1.insert(2); c1.insert(3); c

例6.13 已知一个一维数组a[1..n](n&lt;25),又已知一整数m。 如能使数组a中任意几个

/*例6.13 已知一个一维数组a1..n,又已知一整数m. 如能使数组a中任意几个元素之和等于m,则输出YES,反之则为NO.[分析]对于一个已确定的数组a[1..n]和一个确定的数m,判断能否使数组a中任意几个元素之和等于m,等价于判断能否从数组a中取任意数使其和为m. 对于a中任意元素a[n]只有取与不取两种情况: (1)取a[n]: 则此时问题转化为:对于一个已确定的数组a[1..n-1]和一个确定的数m-a[n],判断能否使数组a[1..n-1]中任意几个元素之和等于m-a[n]. (