Почему в последовательных контейнерах есть параметр size_type и difference_type?
vector<int>
имеет как vector<int>::size_type
, так и vector<int>::difference_type
. Кажется ненужным для того, чтобы оба существовали, поскольку size_type
гарантированно может содержать значение, максимальное, чем максимальное количество элементов, которое a vector<int>
может содержать в данной системе, и в любом действительном случае использования difference_type
должно обязательно быть меньше или равно максимальному числу элементов, т.е. расстояние между двумя элементами в последовательном контейнере никогда не будет больше максимального количества элементов, которые могут содержать последовательный контейнер. Может ли кто-нибудь представить пример, где есть полезное различие между этими двумя?
Ответы
Ответ 1
container::difference_type
существует, потому что для некоторых контейнеров последовательности вы можете вычесть итераторы. Это вычитание может привести к отрицательному числу. Вы не можете использовать container::size_type
для этого результата, так как он без знака, поэтому у вас никогда не будет отрицательного значения. Таким образом, мы имеем container::difference_type
, который представляет собой целое число со знаком, которое является difference_type
итератора контейнера.