QList<int> ss;
for (int i=0; i<5; i++)
{
ss.append(i);
}
for (auto it=ss.begin(); it!=ss.end(); it++)
{
int i = -1;
if (*it == 1||*it==2)
{
i = it - ss.begin();
WRITE_FMT_LOG("%d\n", i);
ss.removeAt(i);
i = it - ss.begin();
WRITE_FMT_LOG("%d\n", i);
//it--;
}
}
我们都知道,使用迭代器remove元素,要把remove返回的迭代器传给当前迭代器,std map什么的都是这样的.
但qt的QList只有一个removeat,还没返回值,只能手动通过 迭代器减减 来做.
减减就减减吧,关键是,removeAt之后 的行为不一致.
就上面那个例子,如果比较的是1、2两个数字 (if (*it == 1||*it==2)) 不需要减减,自动remove往前减一个,
而如果是3、4,则不自动减.产生歧义.
------解决思路----------------------
没看明白什么意思。
QList依然可以用类似STL的erase(),为什么非要用removeAt()?