简述vector 越界访问下标,map 越界访问下标?vector 删除元素时会 不会释放空间 ?
参考答案:
- Vector 越界访问下标:
std::vector
是一种动态数组,它允许你存储相同类型的元素集合。当你尝试访问超出 vector
实际大小的索引时,会发生越界访问。例如,如果你有一个大小为 5 的 vector
,合法的下标范围是 0 到 4。如果你尝试访问索引 5 或更大的位置,就会导致越界访问。这种越界访问在 C++ 中通常不会抛出异常,而是会导致未定义的行为,这可能包括数据损坏或程序崩溃。
- Map 越界访问下标:
std::map
是一个关联容器,它存储的元素是键值对,并且根据键的值自动排序。与 vector
不同,map
没有固定的大小概念,也没有下标运算符 []
。你不能像访问数组那样使用下标来访问 map
中的元素。相反,你使用键来访问或插入元素。因此,map
不存在越界访问下标的问题。
- Vector 删除元素时是否会释放空间:
当你从 vector
中删除元素时,vector
的大小(即它包含的元素数量)会减小,但是已分配的内存空间不会自动释放。这是因为频繁的内存分配和释放操作会影响性能。相反,vector
会保留已分配的内存,以便将来添加新元素时能够快速扩展。如果你想释放 vector
中未使用的内存,可以使用 vector::shrink_to_fit
成员函数。这个函数会尝试减小 vector
的容量,以匹配其当前的大小,并释放多余的内存。但是请注意,这只是一个建议,并不保证一定会释放内存,因为具体的实现可能因库而异。