Информация об изменениях

Сообщение Re[15]: Комплексные числа от 10.02.2022 12:50

Изменено 10.02.2022 12:53 T4r4sB

Re[15]: Комплексные числа
Здравствуйте, vdimas, Вы писали:

V>
V>    vector<int> vec = { 1, 2, 3 };
    
V>    for(auto i = vec.begin(), e = vec.end() - 1; i < e; ++i)
V>        cout << *i << endl;
V>


Кажется, у нас тут UB) Причём в отличие от цикла не беззнаковых индексах, оно тут не только на пустом векторе, но даже на векторе длины 1. Попытка применить клёвые молодёжные итераторы не удалась.
Кстати иногда таки нужен индекс внутри цикла. Само значение.

V>Итераторы появились вместе с векторами и сразу же через итераторы с вектором и работали.


Вектор это абстракция над массивами, массивы существовали задолго до векторов, и работали с ними через индексы.
Ну и до введения auto я чёто не помню любителей расписывать
(for std::vector<std::hash_table<std::string, std::vector<std::string> > >::iterator it = a.begin(); it < a.end(); ++it)


V>Где требуется арифметика над индексами, там вектор обычно подходит плохо.

V>То размерность коллекции в единицы элементов, то требуется вставка/удаление из произвольных индексов.
V>Для обоих случаев есть более подходящие коллекции.

Например?

V>Арифметика сравнений проще в беззнаковом варианте.


a<b? Вроде пишется одинаково...
Re[15]: Комплексные числа
Здравствуйте, vdimas, Вы писали:

V>
V>    vector<int> vec = { 1, 2, 3 };
    
V>    for(auto i = vec.begin(), e = vec.end() - 1; i < e; ++i)
V>        cout << *i << endl;
V>


Кажется, у нас тут UB) Причём такое же, как в цикле на беззнаковых индексах, оно тут на пустом векторе.
Крайне хреново, когда арифметика ограничивает тебя убогим диапазоном без запаса с обеих сторон, не так ли?
Кстати иногда таки нужен индекс внутри цикла. Само значение.

V>Итераторы появились вместе с векторами и сразу же через итераторы с вектором и работали.


Вектор это абстракция над массивами, массивы существовали задолго до векторов, и работали с ними через индексы.
Ну и до введения auto я чёто не помню любителей расписывать
(for std::vector<std::hash_table<std::string, std::vector<std::string> > >::iterator it = a.begin(); it < a.end(); ++it)


V>Где требуется арифметика над индексами, там вектор обычно подходит плохо.

V>То размерность коллекции в единицы элементов, то требуется вставка/удаление из произвольных индексов.
V>Для обоих случаев есть более подходящие коллекции.

Например?

V>Арифметика сравнений проще в беззнаковом варианте.


a<b? Вроде пишется одинаково...