【发布时间】:2019-12-19 10:25:26
【问题描述】:
我正在尝试使用像队列这样的有限大小缓冲区将一些数字放在后面,直到达到特定大小(例如 10),然后在将新元素添加到后面时从前面删除一个元素.
我为此使用了一个向量,但是在运行程序(在调试模式下)几次之后,我突然收到了堆损坏错误,例如:
检测到严重错误 c0000374
在运行中间,我认为应该与内存问题有关,因为当我减少向量数量时错误消失了。
到目前为止,我只是使用一个向量并每次都将新值放入它。例如,假设代码是这样的:
#include <iostream>
using namespace std;
vector<int> myvec;
int i = 0;
int main()
{
while(True) {
myvec.push_back(i);
i++;
}
return 0;
}
如何将myvec 的大小限制为 10,这样当它包含 10 个元素并且正在添加一个新元素时,第一个元素会从内存中删除?
在这里使用向量是个好主意,还是我应该使用队列来代替?
【问题讨论】:
-
是的,使用矢量是个好主意。只需将其包装在您的数据结构中,以便您管理大小。
-
只需创建一个类并自定义推送方法
-
没有办法直接限制向量的大小。
-
您在评论中提到您需要在一端添加并从另一端删除的答案。这就是
std::deque的工作。至于限制元素的数量,只需在推新之前检查序列中有多少。用适当的接口编写你自己的类,并在类中使用std::deque来保存它的数据。 -
我最终使用了@PeteBecker 的建议。
标签: c++ memory vector queue buffer