java 中的front_使用2方法提取容器中的数据(pop_front和front)

(抱歉我的英语不好!)嗨,我正在学习工业计算 . 这是我的第五个任期 . 在我的一门课程中,老师要求我们在c中写一个 class 'List'(仅向前,一个ptr到下一个元素而不是前一个元素) . 我做了一个简单的'extract'方法,它返回一个value_type并删除第一个元素,但我的老师说,如果复制构造函数抛出一个异常,那么该值将因为已被提取而丢失 . 我期待std :: forward_list,我已经看到stl提供了一个提取方法和一个访问最后一个元素的方法(pop_front()和front()) . 我不明白为什么我们不能在一个方法中做到这一点?我写了这段代码:

value_type extract()

{

if( empty() )

throw EmptyList();

std::unique_ptr< Node > p = m_Head;

if( m_Head == m_Last )

m_Last = nullptr;

m_Head = m_Head->m_Next;

try

{

return p->m_Value;

}

catch( ... )

{

m_Head = p.release();

if( !m_Last )

m_Last = m_Head;

throw;

}

}

我还使用nothrow_t参数创建了一个方法提取,它不会复制任何东西(返回void),因此我们可以“强制”提取 . 为什么stl没有这样做?做“auto v = something.pop();”会很高兴 . !我的版本是否安全?如果我们真的关心可以在复制构造函数中抛出的异常,并且我们真的想继续使用AND来保存数据,那么我们不能简单地尝试捕获'pop'方法吗?

谢谢你的帮助!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值