我有一个项目在c + + 03有一个problem与数据结构:我使用矢量而不是列表,即使我不得不连续pop_front-push_back。但现在可以,因为我现在需要重写太多的代码。弹出式元素从std :: vector和重用元素
我的做法是tu有一个最后frame_size点的缓冲区始终更新。所以每一帧我都要弹出并推回去。 (mayebe有这种方法的名称?)
,所以我用这个代码:
Point apoint; // allocate new point
apoint.x = xx;
apoint.y = yy;
int size = points.size()
if (size > frame_size) {
this->points.erase(points.begin()); // pop_front
}
this->points.push_back(apoint);
我有对象池的一些准备使用的代码,所以我想:这是不是很棒的优化,但我可以将前端存储在池中,因此我可以获得apoint的分配时间。
好吧,这不是很有用,也许它没有任何意义,但我只问教育的好奇心:我该怎么做?
如何可以存储矢量的擦除元件的存储器用于重复使用它?这个问题有意义吗?如果不是,为什么?
..因为擦除不返回擦除矢量,它返回:
随机访问迭代器指向的元素 的新位置,然后函数调用,这是抹去了最后一个元素 如果操作删除了 序列中的最后一个元素,则向量结束。
如果你持续使用'pop_front',而不想使用'list',那为什么不使用'std :: deque'? – 2012-02-27 11:08:56
问题是我有很多使用std :: vector的实用程序,所以我需要打开实用程序的存储库,将它分叉,然后模板(或重写)所有采用向量来使其可用于列表或Deque的所有内容 – nkint 2012-02-27 11:11:40
Point重量的创造?您正在存储对象,而不是指向向量中的对象的指针。如果要将对象保存在池中,最好将它们存储为指针而不是对象。 – Jagannath 2012-02-27 11:19:57