本文介绍了C ++ STL中向量的恒定时间交换逻辑的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为什么交换两个C ++ STL向量的内容而不需要相应向量大小的时间复杂性为何?

Why is the time complexity required for swapping contents of two C++ STL vectors independent of the size of the corresponding vectors?

参考: http://www.cplusplus.com/reference/vector/vector/swap/

推荐答案

典型的矢量实现存储:

  • 分配器
  • 指向第一个元素的指针
  • 指向末尾位置或大小的指针
  • 指向向量所拥有的存储块末尾的指针,或等效地为容量

swap()仅交换指针,如果 allocator_traits< allocator_type> :: propagate_on_container_swap :: value 为true,则分配器.它不执行逐元素交换.实际上,除 std :: array 之外,没有标准容器可以进行按元素的交换.

swap() simply swaps the pointers, and, if allocator_traits<allocator_type>::propagate_on_container_swap::value is true, the allocator. It doesn't do element-wise swap. In fact, no standard container other than std::array is allowed to do element-wise swap.

这篇关于C ++ STL中向量的恒定时间交换逻辑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-17 05:35