gpt4 book ai didi

c++ - 用自身的拷贝交换 vector

转载 作者:可可西里 更新时间:2023-11-01 15:40:17 30 4
gpt4 key购买 nike

在阅读代码时我看到:

vector<TypeA>(typeAObj).swap(typeAObj);

我的问题是

为什么他们将一个 vector 与其自身的拷贝交换?

最佳答案

这是 C++03 中收缩以适应的模式,在 vector 类的接口(interface)中没有这样的操作。代码所做的是创建一个拷贝(希望 vector 的 capacity 接近可用元素的数量),然后将其与原始 vector 交换。表达式完成后,临时(现在保存原始缓冲区)被丢弃并释放内存。

考虑:

std::vector<int> large;
large.reserve( 10000000 ); // might be the result of multiple push_back/erase
// large.capacity() >= 10000000
large.push_back( 1 ); // Make more explicit that 'large' might not be empty
std::vector<int>( large ).swap( large );
// large.capacity() is hopefully closer to 1

在 C++11 中, vector 类型已被修改以提供承担该角色的 shr​​ink_to_fit 操作。需要注意的是,旧模式和shr​​ink_to_fit都不是绑定(bind)操作,即除以外的操作后vector的capacity没有保证>容量() >= 大小()

关于c++ - 用自身的拷贝交换 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9379823/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com