我试图根据一个条件从向量中删除行,如果列值等于字符串“NULL”,则应删除整行。但它似乎不起作用。我试图删除行如下:
for (row = MACRECORDARRAY.begin(); row != MACRECORDARRAY.end(); row++) {
for (col = row->begin(); col != row->end(); col++) {
if (*col == "NULL") {
MACRECORDARRAY.erase(row);
}
}
}
答案 0 :(得分:4)
从矢量中擦除满足谓词的所有元素的正确方法是擦除 - 删除习语:
{ "_id" : "638251888450756608", "maxDate" : NumberLong("1441006865000") }
{ "_id" : "637192023661895680", "maxDate" : NumberLong("1440760528000") }
答案 1 :(得分:3)
致电
后MACRECORDARRAY.erase(row);
row
成为无效的迭代器。之后,执行使用row
的任何表达式都会导致未定义的行为。
将代码更改为:
for (row = MACRECORDARRAY.begin(); row != MACRECORDARRAY.end(); /* row++ Don't need this */ ) {
bool delRow = false;
for (col = row->begin(); col != row->end(); col++) {
if (*col == "NUL") {
delRow = true;
break;
}
}
if (delRow) {
row = MACRECORDARRAY.erase(row);
} else {
++row;
}
}