关于vector的使用

无法支持的类型 2018-01-16 03:14:27
我现在需要记录矩形的长和宽以及它第左上点的XY坐标值,和这个矩形的编号,
如下
struct Rect
{
int x;
int y;
int w;
int h;
int num;
}
我定义一个vector<Rect> rect;

num这个值是逐次+1的,我想当num>14时,就删除最前面的一个元素,也就是说,我只要vector有15个元素就好了,不需要过于大,应该如何实现?
...全文
362 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
liweiiewil 2018-01-17
  • 打赏
  • 举报
回复
一定要用vector吗?vector删除首元素会很慢,如果你一定要用vector,可以用如下的方式: if (rect.size() > 15) rect.erase(0); 但如果不是一定要用vector的话,用list就可以pop_front了.list不提供随机访问,如果还希望有随机访问的功能,可以用deque
幻夢之葉 2018-01-16
  • 打赏
  • 举报
回复
引用 6 楼 wangkuo106 的回复:
[quote=引用 4 楼 jianwen0529 的回复:] 建议使用队列。当多于14,就出队一个 你坚持使用vector,那就用这样子:if(rect.size() > 15) rect.erase(rect.begin());
如果这样15个了,我把第一个删除了,我在用rect[0].x 的时候,是原来的rect[1].x吗?还是说,这个下标已经不能用了?不使用队列是因为,我中间还要使用到其中的变量,使用队列对于遍历变量来说比较麻烦。[/quote] 是的,那句话的含义就是删除首个元素,其他的数据会前移
  • 打赏
  • 举报
回复
引用 4 楼 jianwen0529 的回复:
建议使用队列。当多于14,就出队一个 你坚持使用vector,那就用这样子:if(rect.size() > 15) rect.erase(rect.begin());
如果这样15个了,我把第一个删除了,我在用rect[0].x 的时候,是原来的rect[1].x吗?还是说,这个下标已经不能用了?不使用队列是因为,我中间还要使用到其中的变量,使用队列对于遍历变量来说比较麻烦。
幻夢之葉 2018-01-16
  • 打赏
  • 举报
回复
不过话说num真的不是很需要,你删除一个那就需要全部修改一遍 vector本身就是顺序容器,用下标就可以判断
幻夢之葉 2018-01-16
  • 打赏
  • 举报
回复
建议使用队列。当多于14,就出队一个

你坚持使用vector,那就用这样子:if(rect.size() > 15) rect.erase(rect.begin());
paschen 版主 2018-01-16
  • 打赏
  • 举报
回复
这是vector实现上的问题,不需要在Rect中实现,直接在在添加元素时判断,如果大小超过了,则不再添加
  • 打赏
  • 举报
回复
引用 1 楼 bocneuy 的回复:
If(rect.size()>15){ rect.pop_front() }
vector没有pop_front()
bocneuy 2018-01-16
  • 打赏
  • 举报
回复
If(rect.size()>15){ rect.pop_front() }

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧