如果是遍历查询,可先计算end迭代器,减少每次计算的数量,例如:
typedef vector<int> VEC;
VEC oneVec;
VEC::iterator itEnd = oneVec.end();
for(VEC::iterator it = oneVec.begin();it!=itEnd;++it)
{
...
}
但如果在遍历中会删除或增加容器中的元素,这样就会出问题。
//itEnd一直不变,但实际容器的end已经改变了。
typedef vector<int> VEC;
VEC oneVec;
VEC::iterator itEnd = oneVec.end();
for(VEC::iterator it = oneVec.begin();it!=itEnd;)
{
if(...)
{
it = oneVec.remove(it)
}
else
{
++it;
}
}
//应该用
typedef vector<int> VEC;
VEC oneVec;
VEC::iterator itEnd = oneVec.end();
for(VEC::iterator it = oneVec.begin();it!=oneVec.end();)
{
if(...)
{
it = oneVec.remove(it)
}
else
{
++it;
}
}
但在遍历中有可能在我们不清楚的情况改变了容器的大小,或者在后续修改代码时增加了功能改变了容器大小,因此为了安全起见,还是统一每次计算end()吧。