只见用来从std::vector
删除一个选择的元素下面的代码:迭代器是否支持+运算符?
vector<hgCoord>::iterator it;
int iIndex = 0;
const int iSelected = 5;
for(it = vecPoints.begin(); it != vecPoints.end(); ++it, ++iIndex)
{
if(iIndex == iSelected)
{
vecPoints.erase(it);
break;
}
}
我认为,这个代码是没有效率的,应该按如下方式写入:
vector<hgCoord>::iterator it;
int iIndex = 0;
const int iSelected = 5; // we assume the vector has more than 5 elements.
vecPoints.erase(vecPoints.begin() + iSelected);
不过,我不是确定此代码是否遵循C++ STL标准。
你是对的,因为'std :: vector :: iterator'是一个'RandomAccessIterator'(又名'T *')。请记住,如果向量中的元素少于5个,则第二个算法将失败。 –
2010-11-04 19:12:53
如果这些前缀''i'是匈牙利符号的一种形式,我强烈反对任何一段代码。 – 2010-11-04 19:30:13
@ eq-:什么,因为'i'应该用作'iterator'的前缀,你的意思是;-p – 2010-11-04 19:54:13