Здравствуйте, rusted, Вы писали:
R>Здравствуйте, Аноним, Вы писали:
А>>4. STL-контейнеры провоцируют использование size_t. Беззнаковость этого типа влечёт проблемы.
R>проблемы влечет не сама беззнаковость size_t, а непоследовательность в использовании типов. и количество элементов в контейнере и индекс элемента не могут быть отрицательными — вполне логично делать их беззнаковыми. проблемы начинаются, когда в коде для них в одном месте используется знаковые типы, а в другом — беззнаковые.
Нет. Проблемма именно в беззнаковости stl.
пример:
for(i = 0, j = vec.size()-1; i < j; i++)
{
// перебираем элементы парами, например для вычисления расстояния м-ду соседними
vec[i]; vec[i+1];
}
Со знаковыми типами вот такой код будет нормально работать, а с бесзнаковыми i,j при vec.size()==0 будут грабли.
R>зачем в вашем примере GetPos возвращает int? судя по всему только для возможности задать спец значение -1, на мой взгляд в таком случае более правильно использовать явно объявленое значение для беззнакового — как например std::string::npos.
Для того чтобы можно было писать по человечески. Если например двигаемся в произвольном направлении и с произвольным шагом, то к индексу прибавляется приращение: i+=d, а приращение вполне может быть и отрицательным.