Ответ 1
Почему бы не использовать контейнер, который не заботится о том, какая длина - как, например. std::string
?
Теперь так получилось, что я недавно работал с TZ db, как указано в общем формате csv (например, здесь в файле из CERN), но тот же формат также используется в источниках Boost.
С этими данными я вижу максимальную длину 28:
R> library(RcppBDT) # R package interfacing Boost Date_Time
Loading required package: Rcpp
R> tz <- new(bdtTz, "America/Chicago") # init. an object, using my default TZ
R> tznames <- tz$getAllRegions() # retrieve list of all TZ names
R>
R> length(tznames) # total number of TZ identifiers
[1] 381
R>
R> head(tznames) # look at first six
[1] "Africa/Abidjan" "Africa/Accra" "Africa/Addis_Ababa"
[4] "Africa/Algiers" "Africa/Asmera" "Africa/Bamako"
R>
R> summary(sapply(tznames, nchar)) # numerical summary of length of each
Min. 1st Qu. Median Mean 3rd Qu. Max.
9 13 15 15 17 28
R>
R> tznames[ nchar(tznames) >= 26 ] # looking at length 26 and above
[1] "America/Indiana/Indianapolis" "America/Kentucky/Louisville"
[3] "America/Kentucky/Monticello" "America/North_Dakota/Center"
R>
Мы также можем посмотреть на гистограмму:
R> library(MASS)
R> truehist(sapply(tznames, nchar),
+ main="Distribution of TZ identifier length", col="darkgrey")
R>
Это использует код, который у меня есть в пакете RcppBDT SVN repo на R-Forge, но еще не включен в версия CRAN пакета.