reference front和pop_front

时间:2011-06-05 18:29:32

标签: c++ stl

这是合法的吗?:

Sample& sample = stack.front();
stack.pop_front();

我的计划有效。但是Sample类有boost::optional<boost::posix_time::ptime> xxx成员,pop_front之后,is_initialized()返回false;

3 个答案:

答案 0 :(得分:12)

不,这不合法。您必须获取该对象的副本,即使用

Sample sample = stack.front ()

如果您使用的是std::vectorpop_front调用会将元素移到后面,而您的引用会指向另一个元素(之前的第二个元素,现在是第一个元素。)

答案 1 :(得分:1)

不,当然不是。从集合中删除对象后,您的引用就无法引用。

答案 2 :(得分:1)

如果stack基于std::dequestd::vectorstd::list的行为完全相同。

根据标准:

std :: deque :: pop_front

  删除元素的

迭代器和引用无效。如果该元素是容器中的最后一个元素,则过去的迭代器也将无效。其他引用和迭代器不受影响。