C++中vector.clear()为何仍保留值?两种访问方式差异解惑
vector.clear() 后值残留与遍历行为差异的原因
vector.clear()的实际作用是将容器的有效元素数量(size)置为0,但不会释放底层已经分配的内存(容量capacity保持不变)。原来的元素所在的内存空间暂时没被覆盖,所以你可能还能通过vector[index]读到旧值,但这些值已经不属于vector的有效元素范畴了。- 用
vector[index]访问clear()后的元素属于未定义行为。C++标准不保证这块内存的内容会被保留,只是刚好你的程序运行时没有其他操作覆盖这块内存而已,这种行为完全不可靠,换环境或后续操作就可能失效。 - 范围for循环是基于容器的
begin()和end()迭代器工作的。clear()之后,vector的begin()迭代器会和end()迭代器指向同一位置,遍历区间为空,循环体根本不会执行,自然没有任何输出。
内容的提问来源于stack exchange,提问作者Mehedi Hasan Pranta
相关产品推荐
相关产品推荐

