MST

星途 面试题库

面试题:C++中vector容量收缩的常用方法及应用场景

在C++中,简述vector容量收缩的两种常见方法(如shrink_to_fit和reserve相关操作),并举例说明在何种应用场景下适合使用这两种方法进行容量收缩。
30.8万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. shrink_to_fit方法
    • 简述shrink_to_fit请求容器减小其容量以匹配其当前大小。这并不保证容量一定会减小到与大小相同,但会尽量减少不必要的内存占用。
    • 应用场景:当你明确知道不再需要额外的预分配空间,且希望尽可能减少内存占用时使用。例如,在处理完大量数据后,数据量稳定下来,且不再需要预分配的额外空间,此时调用shrink_to_fit可以释放部分未使用的内存。
    • 示例代码
#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec;
    for (int i = 0; i < 1000; ++i) {
        vec.push_back(i);
    }
    // 此时vec可能有额外的预分配空间
    std::cout << "Before shrink_to_fit, capacity: " << vec.capacity() << ", size: " << vec.size() << std::endl;
    vec.shrink_to_fit();
    std::cout << "After shrink_to_fit, capacity: " << vec.capacity() << ", size: " << vec.size() << std::endl;
    return 0;
}
  1. reserve相关操作
    • 简述reserve用于预先分配指定数量的元素空间,以避免多次重新分配内存。如果想收缩容量,可以先resize到合适大小,然后再调用reserveresize后的大小,这样可以调整容量。例如vec.resize(new_size); vec.reserve(new_size);
    • 应用场景:当你能够预估数据量的大致上限,并且希望在数据量减少到一定程度后,减少内存占用时使用。比如在一个动态加载数据的系统中,开始加载了较多数据,后来数据量明显减少,且你能预估新的较小的上限,就可以用这种方法调整容量。
    • 示例代码
#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec;
    for (int i = 0; i < 1000; ++i) {
        vec.push_back(i);
    }
    int new_size = 100;
    vec.resize(new_size);
    vec.reserve(new_size);
    std::cout << "After resize and reserve, capacity: " << vec.capacity() << ", size: " << vec.size() << std::endl;
    return 0;
}