在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,因此我不确定它们为什么不被删除.是语法错误还是其他错误?
你的使用没有任何问题erase.问题是if条件内的赋值:
if(b[count].notEmpty = false)
Run Code Online (Sandbox Code Playgroud)
设置b[count].notEmpty为false,然后返回false.这将导致if语句的内部主体永远不会运行.
将其更改为
if(b[count].notEmpty == false)
Run Code Online (Sandbox Code Playgroud)
或事件
if(!b[count].notEmpty)
Run Code Online (Sandbox Code Playgroud)
你应该好好去.