我有一段代码需要定义向量的vector
。我使用它们在一个循环的广告来填充它每一次,片段是这样的:清理向量元素向量
vector < vector<T> > buckets;
for (i = 0 -> N) {
buckets.clear();
....
}
我的问题是即使在bucket
执行.clear()
操作,对下一次迭代后,我看到旧的价值观念存在,这是通常的?
在此先感谢!
我有一段代码需要定义向量的vector
。我使用它们在一个循环的广告来填充它每一次,片段是这样的:清理向量元素向量
vector < vector<T> > buckets;
for (i = 0 -> N) {
buckets.clear();
....
}
我的问题是即使在bucket
执行.clear()
操作,对下一次迭代后,我看到旧的价值观念存在,这是通常的?
在此先感谢!
clear
可能只是将“已使用的条目数量设置为零”[1],所以旧的条目仍然可以在向量中读取。如果您不使用size()
来获取新的尺寸,但使用其他方法,则值仍然存在。
clear
确实可以完全删除内容并且不再可访问。在这种情况下,如果您尝试使用某些内容,程序会崩溃。
[1]是的,如果你需要细节,它会比这更“多”,我正在简化它。例如,它将析构函数称为向量中的元素,但它仍然只是“东西仍然存在”的情况,不再被视为有效。
我宁愿“值可能是可读的”,而不是“值仍然存在”。类在析构函数中清除成员来防止这种情况并不罕见。 – 2013-03-06 20:40:02
好吧,编辑制作... – 2013-03-06 20:43:38
你怎么知道任何东西仍然会在那里,归零或不?当我调用clear()时,我无法在标准中找到阻止实现释放分配内存的任何内容。我错过了什么吗? – us2012 2013-03-06 20:45:17
显示你如何“看到”这些值。 – Zeta 2013-03-06 20:31:05
'for(i = 0 - > N)'无效C++ – 2013-03-06 20:38:10
您确实需要向我们展示实际的代码。 – stefan 2013-03-06 20:43:13