从Vector

时间:2015-09-01 05:13:39

标签: c++

我试图根据一个条件从向量中删除行,如果列值等于字符串“NULL”,则应删除整行。但它似乎不起作用。我试图删除行如下:

for (row = MACRECORDARRAY.begin(); row != MACRECORDARRAY.end(); row++) {
    for (col = row->begin(); col != row->end(); col++) {
        if (*col == "NULL") {
            MACRECORDARRAY.erase(row);              
        }
    }       
} 

2 个答案:

答案 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;
    }
}