2010-07-20 27 views
0

在我的项目中,我使用std :: queue类。我想知道如果我做以下事情会发生什么。如何在队列中使用内存?

  • 获取队列中某个元素的指针(注意:指针而不是迭代器)。
  • 我做出像在队列push和pop的队列修改(弹出元件,其不是由以前的指针指向)

难道我的指针我在开始的时候指定相同的元素仍指向?它是由队列规范定义的吗?

回答

1

std::queue使用序列容器来实现它。默认情况下,使用std::deque。对于std::deque,只要所有插入和擦除位于容器的开始或结束处,对容器中元素的引用和指针都不会失效。

但是,我不知道你将如何得到一个指向队列中的元素的指针;它没有为此提供功能(您只能获得对队列中第一个和最后一个元素的引用)。

+0

其实我必须为我的库C++使用std :: queue生成一个包装器C.用户希望能够通过指针使用数据(他喜欢根据需要修改规范)。打算使用迭代器来获取指向元素的指针,但没有保险就没关系或不... – Phong 2010-07-20 07:38:23

+0

@Phong:'std :: queue'没有迭代器。 – 2010-07-20 12:56:01

+0

我的错误,你是对的。 – Phong 2010-07-21 00:42:01

1

改为使用std :: deque。 std :: queue旨在防止用户执行任何非队列操作。

+0

好的,但它并没有真正回答我的问题。 (std ::队列使用std :: dequeue)。如果我得到一个元素的引用(指针),并且如果我做了一个push/pop动作。该参考是否失效? – Phong 2010-07-20 07:41:56

+0

对不起,我误解了你的问题。指向默认队列元素的迭代器或指针可能会在推送或弹出时失效。但是,你可以创建一个std :: queue >,它不会使迭代器或指向容器的指针无效。 – 2010-07-20 08:03:04