微前端架构如何改变企业的开发模式与效率提升
586
2022-10-22
insert与copy的插入比较
举例代码: 将一段数据复制到vector的首部
int data[5] = {0,1,2,3,4};vector
查看copy方法的实现:
template
copy的第三个参数inserter是这样的:
template< class Containerstd::insert_iterator
insert_iterator的实现是这样的:
_LIBCPP_INLINE_VISIBILITY insert_iterator(_Container& __x, typename _Container::iterator __i) : container(_VSTD::addressof(__x)), iter(__i) {}
对,其实就是构造了一个容器。 insert_iterator是一个类,不同的容器以模板泛型编程的方式被类实现。copy每调用一次inserter(d_first)即申请内存创建对象,随即进行数据复制(*d_first++ = *first++)。
insert方法中相关的底层函数调用
vector::__move_range ==> std::move_backward ==> std::move move_range:
template
在循环中申请了一段区间内存,然后一次性move_backward. move_backward
template< class BidirIt1, class BidirIt2 >BidirIt2 move_backward(BidirIt1 first, BidirIt1 last, BidirIt2 d_last){ while (first != last) { *(--d_last) = std::move(*(--last)); } return
std::move的实现其实很简单:
template
故,从效果上来看,copy需要多次调用inserter函数,申请一段内存,每一次申请成功就复制数据;区间型insert这是在一个循环中申请够内存后再通过move_backward以逆向的方式一次性复制数据。此外,copy每次调用inserter都会发生移动,而insert因为是申请区间内存,故仅发生一次大的移动。 故从效率上看insert更好。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~