网站首页 > 文章精选 正文
一、std::map erase 函数声明
这里首先要注意,C++98 和c++11 针对map的erase函数有不同的函数原型,这往往是出现问题的关键所在。
参考如下链接:
http://www.cplusplus.com/reference/map/map/erase/
C++98
void erase (iterator position);
size_type erase (const key_type& k);
void erase (iterator first, iterator last);
C++11
iterator erase (const_iterator position);
size_type erase (const key_type& k);
iterator erase (const_iterator first, const_iterator last);
C++98标准 中map的 erase() 使用示例:
map<string,string> mapTest;
typedef map<string,string>::iterator ITER;
//method 1:使用删除之前的迭代器定位下一个元素。
for(ITER iter=mapTest.begin(); iter!=mapTest.end(); )
{
cout<<iter->first<<":"<<iter->second<<endl;
//iter++这样写法,确保map::erase之后不影响迭代器有效性
//** 后置自增运算符的实现(先复制,再自增,后返回复制值)
mapTest.erase(iter++);
}
C++11 erase() 使用示例:
成员函数返回下一个元素的迭代器
map<string,string>::const_iterator iter;
for( ; iter=mapTest.begin();iter!=mapTest.end();)
{
cout<<iter->first<<":"<<iter->second<<endl;
iter=mapTest.erase(iter); // 如果使用C++98标准编译器,这里会报错
}
二、std::vector erase 函数声明
参考 http://www.cplusplus.com/reference/vector/vector/erase/
c++98:
iterator erase (iterator position);
iterator erase (iterator first, iterator last);
c++11:
iterator erase (const_iterator position);
iterator erase (const_iterator first, const_iterator last);
12
c+一、std::map erase 函数声明
这里首先要注意,C++98 和c++11 针对map的erase函数有不同的函数原型,这往往是出现问题的关键所在。参考如下链接:http://www.cplusplus.com/reference/map/map/erase/
C++98
void erase (iterator position);
size_type erase (const key_type& k);
void erase (iterator first, iterator last);
123
C++11
iterator erase (const_iterator position);
size_type erase (const key_type& k);
iterator erase (const_iterator first, const_iterator last);
123
C++98标准 中map的 erase() 使用示例:
map<string,string> mapTest;
typedef map<string,string>::iterator ITER;
//method 1:使用删除之前的迭代器定位下一个元素。
for(ITER iter=mapTest.begin(); iter!=mapTest.end(); )
{
cout<<iter->first<<":"<<iter->second<<endl;
//iter++这样写法,确保map::erase之后不影响迭代器有效性
//** 后置自增运算符的实现(先复制,再自增,后返回复制值)
mapTest.erase(iter++);
}
123456789101112
C++11 erase() 使用示例:成员函数返回下一个元素的迭代器
map<string,string>::const_iterator iter;
for( ; iter=mapTest.begin();iter!=mapTest.end();)
{
cout<<iter->first<<":"<<iter->second<<endl;
iter=mapTest.erase(iter); // 如果使用C++98标准编译器,这里会报错
}
123456
二、std::vector erase 函数声明
参考 http://www.cplusplus.com/reference/vector/vector/erase/
c++98:
iterator erase (iterator position);
iterator erase (iterator first, iterator last);
12
c++11:
iterator erase (const_iterator position);
iterator erase (const_iterator first, const_iterator last);
c++98和c++11标准中,vector的erase方法函数返回值类型是一致的,,在使用erase上,参照下面的实现方法。
vector<int> iVec{1,3,3,4,5};
auto it = iVec.begin();
for( ; it != iVec.end(); ) {
if(*it % 3 ==0)
it=iVec.erase(it); //删除元素,返回值指向已删除元素的下一个位置
else
++it; //指向下一个位置
}
注意到,我们在删除元素之后直接将返回值赋给it,这里绝对不能做自加操作,因为迭代器(后续)完全失效,这样的操作是未定义的。这一点和map不同。
+98和c++11标准中,vector的erase方法函数返回值类型是一致的,,
在使用erase上,参照下面的实现方法。
vector<int> iVec{1,3,3,4,5};
auto it = iVec.begin();
for( ; it != iVec.end(); ) {
if(*it % 3 ==0)
it=iVec.erase(it); //删除元素,返回值指向已删除元素的下一个位置
else
++it; //指向下一个位置
}
注意到,我们在删除元素之后直接将返回值赋给it,这里绝对不能做自加操作,因为迭代器(后续)完全失效,这样的操作是未定义的。这一点和map不同。
- 上一篇: 商品属性与规格管理:灵活应对多样化商品需求
- 下一篇: List、Set、Map 之间的区别是什么?
猜你喜欢
- 2025-01-08 使用 Vector 将 PostgreSQL 日志输出为 Prometheus 指标
- 2025-01-08 java的list和map区别,list和map的区别是什么
- 2025-01-08 界面组件DevExtreme v22.2亮点——UI模板库升级换代!
- 2025-01-08 Unity Shaders学习笔记--SurfaceShader(九)Cubemap
- 2025-01-08 谷歌地图API的三大开源替代品
- 2025-01-08 linux下GDB使用方法
- 2025-01-08 一文读懂map和hash_map的差异原理
- 2025-01-08 C/C++从0到1系统精讲 项目开发综合基础课
- 2025-01-08 《叛乱:沙漠风暴》PC版更新上线!追加新地图/模式
- 2025-01-08 C++游戏客户端/服务器端开发需要掌握什么?
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)