Kluev wrote:
>> > for(i = 0, j = vec.size()-1; i < j; i++)
>
>> > Со знаковыми типами вот такой код будет нормально работать, а с
>> > бесзнаковыми i,j при vec.size()==0 будут грабли.
> kan>А зачем такой ужас писать? Чем банальный
>
> kan>for(size_t i = 0; i + 1 < vec.size(); i++)
> kan>не устраивает?
> Такая форма записи неестественная и не соотвествует ходу мышления.
Мышление переделай. Но запись абсолютно естественна — проверить, что выражение "i+1", которое мы используем как индекс,
не выходит за пределы размера вектора. А что означает "i < vec.size() — 1", особенно в случае нулевого размера?
Ещё прошу заметить, что понятие отрицательного индекса — вообще противоестественна, а поэтому может трактоваться по
разному. Например, в перле, обратиться по индексу "-2" — валидная операция, означает взять второй элемент с конца.
>> > R>зачем в вашем примере GetPos возвращает int? судя по всему только для
>> > возможности задать спец значение -1, на мой взгляд в таком случае более
>> > правильно использовать явно объявленое значение для беззнакового — как
>> > например std::string::npos.
>> >
>> > Для того чтобы можно было писать по человечески. Если например двигаемся
>> > в произвольном направлении и с произвольным шагом, то к индексу
> kan>Для этого есть iterator.
> С итераторами неудобно работать.
> 1) они становятся невалидными после ресайза
> 2) программу неудобно отлаживать, т.к. итератор ничего не говорит ни о
> номере итерации, ни о индексе элемента в массиве.
Индекс для вектора всегда "iter — vec.begin()"
В общем, какие-то надуманные проблемы, чаще всего возникающие от недопонимания понятия "итератор".
Posted via RSDN NNTP Server 2.0