跳到主要内容

简述vector 越界访问下标,map 越界访问下标?vector 删除元素时会 不会释放空间 ?

参考答案:
  1. Vector 越界访问下标

std::vector 是一种动态数组,它允许你存储相同类型的元素集合。当你尝试访问超出 vector 实际大小的索引时,会发生越界访问。例如,如果你有一个大小为 5 的 vector,合法的下标范围是 0 到 4。如果你尝试访问索引 5 或更大的位置,就会导致越界访问。这种越界访问在 C++ 中通常不会抛出异常,而是会导致未定义的行为,这可能包括数据损坏或程序崩溃。

  1. Map 越界访问下标

std::map 是一个关联容器,它存储的元素是键值对,并且根据键的值自动排序。与 vector 不同,map 没有固定的大小概念,也没有下标运算符 []。你不能像访问数组那样使用下标来访问 map 中的元素。相反,你使用键来访问或插入元素。因此,map 不存在越界访问下标的问题。

  1. Vector 删除元素时是否会释放空间

当你从 vector 中删除元素时,vector 的大小(即它包含的元素数量)会减小,但是已分配的内存空间不会自动释放。这是因为频繁的内存分配和释放操作会影响性能。相反,vector 会保留已分配的内存,以便将来添加新元素时能够快速扩展。如果你想释放 vector 中未使用的内存,可以使用 vector::shrink_to_fit 成员函数。这个函数会尝试减小 vector 的容量,以匹配其当前的大小,并释放多余的内存。但是请注意,这只是一个建议,并不保证一定会释放内存,因为具体的实现可能因库而异。