goo*_*era 10 c++ string vector language-lawyer c++11
对于std :: vector的副本分配,当源的大小小于目标的容量时,是否允许重新分配存储和容量缩减?或者是否保证不会发生重新分配/收缩(即始终遵守先前的保留())?
另一方面,如果源的大小大于目的地的容量并且重新分配,则需要重新分配是否与源的容量相关(例如,目的地的新容量应不小于源的容量,或者甚至需要它们是一样的)?或者重新分配只是完成其工作(基于新的大小)而不考虑源的容量?
至于移动分配,我认为不会进行存储重新分配(虽然我未能在标准中找到相关部分),那么它是否意味着目标新容量的值与源的旧容量完全相同?我能期望v = vector<T>{};产生同样的效果vector<T>{}.swap(v);吗?
我想答案都隐藏在标准的某个地方,但我却找不到它们.(如果C++ 11和C++ 03的内容不同,我想知道两者的各种要求.)
PS:对于上述问题的答案,对于std :: string是否相同(仅在C++ 11中,这意味着连续存储而且没有COW,C++ 03字符串不在雷达中)?
回答你的 PS:至少对于std::string,你不能假设字符串的处理与字符向量的处理类似。
COW(写入时复制)并不是强制实现字符串的,并且并非所有库实现都这样做。
| 归档时间: |
|
| 查看次数: |
790 次 |
| 最近记录: |