'size_t' по сравнению с 'контейнером:: size_type'

Swift 4

let RISTRICTED_CHARACTERS = "'*=+[]\\|;:'\",<>/?%"

Метод делегата UITextField:

func textField(_ textField: UITextField, shouldChangeCharactersIn _: NSRange, replacementString string: String) -> Bool {
    let set = CharacterSet(charactersIn: RISTRICTED_CHARACTERS)
    let inverted = set.inverted
    let filtered = string.components(separatedBy: inverted).joined(separator: "")
    return filtered != string
}
100
задан Jonas 20 November 2019 в 22:27
поделиться

3 ответа

Стандартные контейнеры определяют size_type как typedef для Allocator :: size_type (Allocator - это параметр шаблона), который для std: : allocator :: size_type обычно определяется как size_t (или совместимый тип). Так что для стандартного случая они одинаковы.

Однако, если вы используете настраиваемый распределитель, можно использовать другой базовый тип. Так что container :: size_type предпочтительнее для максимальной универсальности.

100
ответ дан 24 November 2019 в 04:54
поделиться

Для std :: [w] string , std :: [w] string :: size_type равно std :: allocator :: size_type , что равно std :: size_t . Для других контейнеров это определенный реализацией целочисленный тип без знака.

Иногда полезно иметь точный тип, поэтому, например, кто-то знает, где этот тип завершается (например, до UINT_MAX ), чтобы можно было использовать это. Или для шаблонов где вам действительно нужно передать два идентичных типа в шаблоны функций / классов.

Часто я нахожу, что использую size_t для краткости или итераторы в любом случае. В общем коде, поскольку вы обычно не знаете, с каким экземпляром контейнера используется ваш шаблон и какого размера эти контейнеры, вам придется использовать typedef Container :: size_type , если вам нужно хранить контейнеры. размер.

8
ответ дан 24 November 2019 в 04:54
поделиться
  • size_t is defined as the type used for the size of an object and is platform dependent.
  • container::size_type is the type that is used for the number of elements in the container and is container dependent.

All std containers use size_t as the size_type, but each independent library vendor chooses a type that it finds appropriate for its container.

If you look at , you'll find that the size_type of Qt containers is version dependent. In Qt3 it was unsigned int and in Qt4 it was changed to int.

39
ответ дан 24 November 2019 в 04:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: