C++ STL¶
- vector
1) std::vector::clear() 方法会清空 vector 中的元素,但它不会释放 vector 已经分配的内存。具体来说,clear() 会将 vector 的大小设置为 0,但它保留了当前的容量(capacity),以便在将来添加新元素时可以重用这部分内存。 2) 如果你希望在清空 vector 后释放未使用的内存,可以使用 shrink_to_fit() 方法。这个方法会请求 vector 释放未使用的内存,将容量缩减到当前大小(即 0)。 3) 当一个 std::vector 超出其作用域时,它的析构函数会被自动调用: a. 释放内存:std::vector 的析构函数会释放它所占用的所有内存,包括存储元素的内存; b. 元素析构:在析构过程中,vector 中的每个元素的析构函数也会被调用。 所以,也可以使用swap来释放vector的内存。 示例: std::vector<int> vec; std::vector<int>(vec).swap(vec); // 创建一个新的临时 vector,它的大小等于 vec 的当前大小 std::vector<int>().swap(vec); // 在 C++11 及更高版本中,可以使用 std::move 来避免不必要的复制 c++11及以后 std::vector<int> vec; vec.clear(); vec.shrink_to_fit(); 总结 swap 技巧是强制性的,但可能会引入额外的性能开销(尤其是当 vector 很大时)。 shrink_to_fit 是请求性的,其效果可能因编译器和标准库的不同而有所不同。 注 reserve()
- string
与vector类似