方法矢量:: clear不会清除二维矢量

时间:2012-07-03 14:49:28

标签: vector clear

非常感谢您的回答。

让我考虑检查向量内容的原因是,即使在我覆盖它之后,仍然存在相同(奇怪)的值。我的目的是迭代生成一些随机变量并将它们放在二维向量中。我给你我的代码,也许我做错了什么:

while (nbre_TTI_tempo != 0 ) 

{
   srand(time(NULL)) ;  

 while (nbre_UE_tempo != 0 )
{ 
  vect.clear() ; 

  nbre_PRB_tempo = nbre_PRB ; 

while (nbre_PRB_tempo != 0) 
 {  

 value = rand() % 15 + 1 ;  // generating random variables between 1 and 15

vect.push_back(value) ; 

  nbre_PRB_tempo -- ; 


   }



 All_CQI.push_back(vect) ; 

 nbre_UE_tempo -- ; 

}

// Do business 

All_CQI.clear();

} .// end while

在第一轮,一切顺利,但在第二轮,这是我在使用“clear”方法后在向量中找到的:

158429184 14 15 158429264 10 9 158429440 五 1

当我试图覆盖它时,我发现: 158429184 14 15 158429264 10 9 158429440 五 1

与使用“push_back”方法之前的值相同。 你认为我在代码中做错了吗? 非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

为了您的目的,如果empty()返回true,您应该相信它是空的并且不应该检查单个元素。因此访问空向量的内容是非法的,并且可能导致内存访问错误。

找到值的原因是因为实际的内存位置不会立即被覆盖 - 它们只被标记为无效。在为其他对象分配相同的内存之前,数据可能保持原样 - 但无法确定 - 实现由编译器完成。

看起来您正在使用数组运算符[]来访问元素。为了更安全,请使用迭代器或.at()方法来访问元素。这两种方法都执行边界检查,不会让你超越最后一个有效元素