tôi thấy đoạn mã sau dùng để xóa một phần tử được chọn từ std::vector
:Nhà điều hành + trình hỗ trợ lặp không?
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;
}
}
Tôi cho rằng mã này là không hiệu quả và nên được viết như sau:
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);
Tuy nhiên, tôi không chắc chắn liệu mã này có tuân thủ tiêu chuẩn C++ STL hay không.
Bạn là chính xác, vì 'std :: vector :: iterator' là một' RandomAccessIterator' (a.k.a. 'T *'). Chỉ cần nhớ rằng nếu bạn có ít hơn 5 phần tử trong vectơ của mình, thuật toán thứ hai của bạn sẽ thất bại. –
Nếu những tiền tố đó là một dạng ký hiệu tiếng Hungari, tôi mạnh mẽ phản đối một trong hai đoạn mã. –
@ eq-: cái gì, vì 'i' nên được sử dụng làm tiền tố có nghĩa là' trình lặp', ý của bạn là ;-p –