Project

General

Profile

C++ STL

  1. 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()
    
  2. string
    与vector类似