2013-03-06 87 views
-3

我有一段代码需要定义向量的vector。我使用它们在一个循环的广告来填充它每一次,片段是这样的:清理向量元素向量

vector < vector<T> > buckets; 

for (i = 0 -> N) { 
    buckets.clear(); 
    .... 
} 

我的问题是即使在bucket执行.clear()操作,对下一次迭代后,我看到旧的价值观念存在,这是通常的?

在此先感谢!

+2

显示你如何“看到”这些值。 – Zeta 2013-03-06 20:31:05

+4

'for(i = 0 - > N)'无效C++ – 2013-03-06 20:38:10

+2

您确实需要向我们展示实际的代码。 – stefan 2013-03-06 20:43:13

回答

2

clear可能只是将“已使用的条目数量设置为零”[1],所以旧的条目仍然可以在向量中读取。如果您不使用size()来获取新的尺寸,但使用其他方法,则值仍然存在。

clear确实可以完全删除内容并且不再可访问。在这种情况下,如果您尝试使用某些内容,程序会崩溃。

[1]是的,如果你需要细节,它会比这更“多”,我正在简化它。例如,它将析构函数称为向量中的元素,但它仍然只是“东西仍然存在”的情况,不再被视为有效。

+0

我宁愿“值可能是可读的”,而不是“值仍然存在”。类在析构函数中清除成员来防止这种情况并不罕见。 – 2013-03-06 20:40:02

+0

好吧,编辑制作... – 2013-03-06 20:43:38

+0

你怎么知道任何东西仍然会在那里,归零或不?当我调用clear()时,我无法在标准中找到阻止实现释放分配内存的任何内容。我错过了什么吗? – us2012 2013-03-06 20:45:17