社区
C++ 语言
帖子详情
关于容器的问题
秋天的晨阳
2012-10-11 03:43:04
例如vit是指向ivec.begin()的迭代器
那么
vit=ivec.erase(vit);//删除元素
--vit;//指向删除元素的前一元素
我理解的是用erase删除元素后返回的迭代器指向的应该还是ivec.begin()
使用--vit后 ivec.begin()的前一个元素是什么?
...全文
114
7
打赏
收藏
关于容器的问题
例如vit是指向ivec.begin()的迭代器 那么 vit=ivec.erase(vit);//删除元素 --vit;//指向删除元素的前一元素 我理解的是用erase删除元素后返回的迭代器指向的应该还是ivec.begin() 使用--vit后 ivec.begin()的前一个元素是什么?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
漫步者、
2012-10-12
打赏
举报
回复
cout<<"--iter="<<*iter<<endl
你去操作了一个受保护的内存地址
若风09
2012-10-12
打赏
举报
回复
begin()函数返回一个指向当前vector起始元素的迭代器.而erase函数的返回值是指向删除的元素的下一位置的迭代器.也就是说
vit = ivec.begin();
vit=ivec.erase(vit);//删除元素,此时vit是ivec第二个位置的迭代器
--vit;//此处确实越界了,但是我刚才网上查了下好像标准库中,vector本来就没有设计越界检查 ,所以这里没有报错,但是当你 cout的时候就会发现其实找不到这个元素,就报错了 ;应该是这样理解
秋天的晨阳
2012-10-11
打赏
举报
回复
[Quote=引用 4 楼 的回复:]
如果是输入要删除的是第一个时。就会出现错误。
你可以自己设置断点调试一下。
[/Quote]
我试了不会出错除非我将
// cout<<"--iter="<<*iter<<endl;
的//去掉 才会出错
我就是想知道为什么
l0g1n
2012-10-11
打赏
举报
回复
如果是输入要删除的是第一个时。就会出现错误。
你可以自己设置断点调试一下。
l0g1n
2012-10-11
打赏
举报
回复
执行这句后iter=lis.erase(iter);
iter指针所指向的位置是不发生变化的,只是list中后面的数据依次前移。
如序列为
a b c d e f g
当输入删除c后,序列为
a b d e f g
iter指向d。
执行--iter后,iter指向b。
秋天的晨阳
2012-10-11
打赏
举报
回复
[Quote=引用 1 楼 的回复:]
你可以看做数组或者链表,采取删除操作时向首部靠近,begin()的前一个,是越界了嘛。
[/Quote]
#include<iostream>
#include<list>
#include<string>
using namespace std;
int main()
{
//将list对象读入元素
string str;
list<string> lis;
while(cin>>str)
lis.push_back(str);
cin.clear();//将输入流置于有效状态
//输入要查找的值
cout<<"请输入"<<endl;
cin>>str;
//处理list对象,删除与str相同的元素
for(list<string>::iterator iter=lis.begin();
iter!=lis.end();++iter)
{
if(*iter==str)
{
iter=lis.erase(iter);
cout<<*iter<<endl;
--iter;
// cout<<"--iter="<<*iter<<endl;
}
}
return 0;
}
为什么越界了不显示错误啊
漫步者、
2012-10-11
打赏
举报
回复
你可以看做数组或者链表,采取删除操作时向首部靠近,begin()的前一个,是越界了嘛。
HTML5 CSS3 专题 :诱人的实例 3D旋转木马效果相册实例源码
代码为博客实例代码 http://blog.csdn.net/lmj623565791/article/details/32964301 有
问题
博客中留言
关于docker
容器
中socket配置端口
问题
关于docker
容器
中socket配置端口
问题
关于
容器
端口和主机端口的关系Socket端口配置关于0.0.0.0和127.0.0.1和其他ip的关系 关于
容器
端口和主机端口的关系 首先,我们在创造
容器
时,如果不指定端口映射,那么这个
容器
时封闭的,不能与外界网络通信。而我们一般情况下则需要指定端口映射,使得我们可以通过主机的端口访问到
容器
。我们常用 docker container run -p 8080:80 -d *progamme_name *这里我们将
容器
的80端口映射到主机的8080端口,之后我们就
boot spring 没有父子
容器
_Spring父子
容器
问题
这个
问题
老早就存在了,只是今天组长让我看AOP不生效的时候,才真实遇到这个
问题
,之前都是用的Spring Boot开发,不会存在这个
问题
。
问题
描述如果使用传统的方式来开发Spring项目,要部署在Tomcat上面,一般会依赖Spring与Spring MVC,在Tomcat的web.xml中会配置一个加载service的配置文件,这个在Tomcat启动的时候会进行加载,会生成一个Spring的
容器
...
C++
容器
STL相关面试
问题
1、六大组件介绍
容器
:数据结构,用来存放数据 算法:常用算法 迭代器:
容器
和算法之间的胶合剂,“范型指针” 仿函数:一种重载了operator()的类,使得这个类的使用看上去像函数 配置器:为
容器
分配并管理内存 适配器:修改其他组件接口 2、为何map和set的插入删除效率比用其他序列
容器
高? 对于关联
容器
来说,不需要做内存拷贝和内存移动。map和set
容器
内所有元素都是以节点的方式来存储,其节点结构和链表差不多,指向父节点和子节点 3、红黑树有什么性质? 1.每个节点都是红色或黑色 2.根节点为黑色 3
Docker系列第04部分:查看
容器
+创建
容器
+启动
容器
+文件挂载+删除
容器
可以在创建
容器
的时候,将宿主机的目录与
容器
内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响
容器
里所对应的目录。创建一个守护式
容器
:如果对于一个需要长期运行的
容器
来说,我们可以创建一个守护式
容器
。停止正在运行的
容器
:docker stop $CONTAINER_NAME/ID。解释:cp 当前目录下的a文件到
容器
中的/usr/local/下的a文件。删除指定的
容器
: 这个命令只能删除已经关闭的
容器
,不能删除正在运行的
容器
。查看所有的
容器
(启动过的历史
容器
)
C++ 语言
65,209
社区成员
250,518
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章