C++STL面试题

1. C++vector原理?resize和reserve的区别是什么?size和capacity的区别?

C++中的 std::vector 是一个动态数组,能够存储可变大小的元素集合。它提供了许多方便的操作,允许开发者以类似数组的方式访问元素,同时能够自动管理内存。

  1. std::vector 的基本原理
  • 动态数组:std::vector 在内部维护一个可动态调整大小的数组。
  • 内存管理:当元素数量超出当前容量(capacity)时,vector 会重新分配内存,通常会扩展到原来的两倍,并将现有元素移动到新的内存地址中。
  • 随机访问:vector 提供随机访问特性,可以用下标直接访问任意元素。
  1. size 和 capacity 的区别
  • size:返回当前存储元素的数量。可以通过 vector.size() 获取。
  • capacity:返回当前分配的内存容量,也就是在不再进行重新分配的情况下,vector 可以容纳的元素数量。可以通过 vector.capacity() 获取。
std::vector<int> vec = {
   1, 2, 3};  
std::cout << "Size: " << vec.size() << std::endl;       // 输出 3  
std::cout << "Capacity: " << vec.capacity() << std::endl; // 输出 3 或更高的值  
vec.push_back(4); // 可能导致重新分配  
std::cout << "Size: " << vec.size() << std::endl;       // 输出 4  
std::cout << "Capacity: " << vec.capacity() << std::endl; // 有可能增加  
  1. resize 和 reserve 的区别

resize(size_type count):

  • 作用:改变 vector 的大小。若 count 增加,新的元素将使用默认构造(如果有)或者需提供的值初始化。若 count 减少,则会去除尾部元素。
  • 例子:
std::vector<int> vec = {
   1, 2, 3};  
vec.resize(5, 0); // vec 变为 {1, 2, 3, 0, 0}  
vec.resize(2);    // vec 变为 {1, 2}  

reserve(size_type new_cap):

  • 作用:更改 vector 的容量,但不改变其大小。仅会分配内存,以允许在未来的操作中容纳更多的元素,避免频繁的内存重新分配。
  • 例子:
std::vector<int> vec;  
vec.reserve(10); // 现在 capacity 至少为 10,但 size 仍然是 0  

总结

  • size 表示 vector 中当前的元素数量。
  • capacity 是实际可容纳的元素数量。
  • resize 用于更改 vector 的大小并初始化新元素。
  • reserve 用于增加 vector 的容量以提高性能,但不改变逻辑大小。

通过合理利用这两个函数,可以有效地管理动态数组的内存使用,优化性能。

2. C++deque的原理?它的内部是如何实现的?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值