【发布时间】:2023-01-10 15:25:47
【问题描述】:
我发现 vector.clear() 确实保留了价值。
Vector.clear() 保留可以通过 vector[index] 访问的值。但是,如果我这样做, for(auto &i:vector) { cout <<a;} 那么,它不会透露任何值。这是什么原因?
【问题讨论】:
-
如果您使用的索引等于或大于向量的大小,则索引超出范围并导致未定义的行为.只是不要这样做!
-
在 C++ 中,程序编译和运行甚至似乎给出“正确”输出的事实并不意味着程序是正确的。如前所述,您访问了不再拥有的内存(并且允许其他代码覆盖它,这还没有发生纯粹是运气不好。运气不好,因为它没有表明您做错了什么)
-
“未定义的行为意味着任何事情都可能发生,包括但不限于提供预期输出的程序。但永远不要依赖具有 UB 的程序的输出。程序可能会崩溃。”