如何正确使用std:vector的erase()函数?

Mik*_* N. 3 c++ vector erase

在std:vector上使用erase()函数时,我遇到了一个奇怪的问题.我使用以下代码:

int count = 0;
for (int itr=0; itr<b.size(); ++itr) {
    if (b[count].notEmpty = false) {
        b.erase(b.begin()+count);
        --count;
    }
    ++count;
}
Run Code Online (Sandbox Code Playgroud)

但是,由于某些原因,实际上没有任何元素从b中删除.b在其他地方宣布如下:

vector<block_data> b;
Run Code Online (Sandbox Code Playgroud)

其中block_data是一个结构,并包含布尔值notEmpty.某些b的元素在代码中较早地正确分配了notEmpty = false,因此我不确定它们为什么不被删除.是语法错误还是其他错误?

Pet*_*der 8

你的使用没有任何问题erase.问题是if条件内的赋值:

if(b[count].notEmpty = false)
Run Code Online (Sandbox Code Playgroud)

设置b[count].notEmptyfalse,然后返回false.这将导致if语句的内部主体永远不会运行.

将其更改为

if(b[count].notEmpty == false)
Run Code Online (Sandbox Code Playgroud)

或事件

if(!b[count].notEmpty)
Run Code Online (Sandbox Code Playgroud)

你应该好好去.

  • @Mike N.:别担心.这是一个非常常见的问题.尽管如此,请尝试打开编译器警告,因为大多数编译器都会针对此特定情况提供警告. (2认同)