您的位置:首页 > 房产 > 建筑 > 上海企业注销网上办理流程_石家庄封控最新消息_索引擎优化 seo_百度浏览器

上海企业注销网上办理流程_石家庄封控最新消息_索引擎优化 seo_百度浏览器

2025/2/25 11:26:13 来源:https://blog.csdn.net/weixin_43459437/article/details/143449068  浏览:    关键词:上海企业注销网上办理流程_石家庄封控最新消息_索引擎优化 seo_百度浏览器
上海企业注销网上办理流程_石家庄封控最新消息_索引擎优化 seo_百度浏览器

deque

底层数据结构

  • 动态开辟的二维数组
  • 第一维数组中存放的是第二维数组的指针
  • 每个第二维数组大小为512字节。假如存放的是**_Tp类型,每个第二维数组存放512/(sizeof(_Tp**))个元素
  • 按照第一维数组大小二倍进行扩容

举例

  • 当deque进行push_back,将下半部分空间元素添加满的时候会进行扩容,以原来空间二倍进行扩容。如下所示。

    在这里插入图片描述
    在这里插入图片描述

    会以原来2倍空间开辟新的空间,并且将原数据复制到新的内存空间。

  • deque进行push_front与push_back类似。

二倍扩容代码

template <class _Tp, class _Alloc>
void deque<_Tp,_Alloc>::_M_reallocate_map(size_type __nodes_to_add,bool __add_at_front)
{size_type __old_num_nodes = _M_finish._M_node - _M_start._M_node + 1;size_type __new_num_nodes = __old_num_nodes + __nodes_to_add;_Map_pointer __new_nstart;//省略部分.....{size_type __new_map_size = _M_map_size + max(_M_map_size, __nodes_to_add) + 2; // _M_map_size第一维数组大小,新扩容空间为原空间2倍_Map_pointer __new_map = _M_allocate_map(__new_map_size); // 按照新空间大小进行扩容__new_nstart = __new_map + (__new_map_size - __new_num_nodes) / 2+ (__add_at_front ? __nodes_to_add : 0); // 定位新空间中元素存放的起始位置,起始位置为__new_nstartcopy(_M_start._M_node, _M_finish._M_node + 1, __new_nstart);  // 将原二维数组元素拷贝到新数组_M_deallocate_map(_M_map, _M_map_size);// 释放原二维数组空间_M_map = __new_map; _M_map_size = __new_map_size;}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com