我一直在使用boost::container::small_vector
存储对象集。
假设我正在使用boost::container::small_vector<T, 1>
,我非常了解,一旦容器中的元素数量超过一定数量,它将退回到使用动态存储而不是使用自动存储的方式。但是,如果我将small_vector的大小重新设置为0元素,则似乎无法恢复数据以再次使用自动存储。
int main() {
typedef boost::container::small_vector<int, 1> V;
auto print = [](V& v) {
std::cout << "v.data=" << v.data() << " v.size=" << v.size()
<< std::endl;
};
V v;
print(v);
for (int i = 0; i < 4; ++i) {
v.push_back(i);
print(v);
}
v.clear();
print(v);
v.shrink_to_fit();
print(v);
v = std::move(V());
print(v);
v = {};
print(v);
V v2;
v.swap(v2);
print(v);
for (int i = 0; i < 2; ++i) {
v.push_back(i);
print(v);
}
}
打印
v.data=0x7fffffff7f18 v.size=1
v.data=0x7fffffff7f18 v.size=2
v.data=0x627c20 v.size=3
v.data=0x627c40 v.size=4
v.data=0x627c40 v.size=0
v.data=0 v.size=0
v.data=0 v.size=0
v.data=0 v.size=0
v.data=0 v.size=0
v.data=0x627c40 v.size=1
v.data=0x627c20 v.size=2
如何使small_vector再次使用自动存储?