非常感谢您的回答。
让我考虑检查向量内容的原因是,即使在我覆盖它之后,仍然存在相同(奇怪)的值。我的目的是迭代生成一些随机变量并将它们放在二维向量中。我给你我的代码,也许我做错了什么:
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”方法之前的值相同。 你认为我在代码中做错了吗? 非常感谢您的帮助。
答案 0 :(得分:0)
为了您的目的,如果empty()返回true,您应该相信它是空的并且不应该检查单个元素。因此访问空向量的内容是非法的,并且可能导致内存访问错误。
找到值的原因是因为实际的内存位置不会立即被覆盖 - 它们只被标记为无效。在为其他对象分配相同的内存之前,数据可能保持原样 - 但无法确定 - 实现由编译器完成。
看起来您正在使用数组运算符[]来访问元素。为了更安全,请使用迭代器或.at()方法来访问元素。这两种方法都执行边界检查,不会让你超越最后一个有效元素