社区
C++ 语言
帖子详情
关于容器的问题
秋天的晨阳
2012-10-11 03:43:04
例如vit是指向ivec.begin()的迭代器
那么
vit=ivec.erase(vit);//删除元素
--vit;//指向删除元素的前一元素
我理解的是用erase删除元素后返回的迭代器指向的应该还是ivec.begin()
使用--vit后 ivec.begin()的前一个元素是什么?
...全文
133
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()的前一个,是越界了嘛。
【
容器
问题
排查相关命令】
确认
容器
状态和退出码。第一时间查看日志!:检查配置、资源限制、挂载、网络。:查看实时资源消耗(CPU、内存)。:进入
容器
内部。topps aux:查看进程。:查看主进程启动命令。:查看端口监听。pingcurl:测试网络。df -h:检查宿主机磁盘空间。:检查Docker磁盘使用。:如果以上都无果,查看Docker引擎本身是否出错。记住,docker logs是解决大多数
容器
启动和运行时
问题
的首选命令。
容器
中时区
问题
控制方式文件/变量优先级作用范围环境变量TZ高当前进程或 shell文件链接→中系统默认时区systemd命令高更新并全局生效其他文件(仅 Debian)低记录用途。
同步
容器
存在的并发
问题
同步
容器
java.util 中,存在一些古老的同步
容器
类,如 Vector、Hashtable。这些同步
容器
类,主要依靠持有内部锁(synchronized 修饰方法)来保证对
容器
状态访问的原子性。因此,几乎所有需要访问
容器
状态的方法,都是 synchronized 修饰的同步方法。虽然保证了线程安全,但也极大降低了并发性,使得同步
容器
在并发场景下堪忧的性能令人诟病。 并发
问题
如果单独使用同步
容器
所提供的操作,可以放心使用,不会带来任何的并发
问题
。因为同步逻辑已经被封装在该操作对应的方法中。但如果使用复
容器
盛水
问题
题1:盛最多水的
容器
解题:双指针 初始两个左右指针,可容纳水量min(左指针,右指针)*指针间距 S(i, j) = min(h[i], h[j]) × (j - i) 移动数字较小的指针,min(h[i],h[j])可能变大 public class Solution { public int maxArea(int[] height) { int left = 0; int right = height.length-1; int vomumn = 0; while(
Docker 常见
容器
问题
容器
退出后,通过 docker container ls 命令查看不到,数据会丢失么? 如何停止所有正在运行的
容器
? 如何批量清理已经停止的
容器
? 如何获取某个
容器
的 PID 信息? 如何给
容器
指定一个固定 IP 地址? 如何临时退出一个正在交互的
容器
的终端,而不终止它? 使用 docker port 命令映射
容器
的端口时,系统报错“Error: No public port ‘80’ published for xxx”?
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章