@ Кристиан Рау
С того момента, как комитет по изучению STL-ize (превратившийся в последовательность, шаблонизированный) стал классом Plauger (думаю, примерно в 1995 году), std::string
всегда былstd::vector
плюс строки, связанные со строкой (преобразование из / в 0, конкатенация, ...), а также некоторые странности, такие как COW, который на самом деле " Копировать при записи и не-const
begin()
/end()
/ operator[]
".
Но, в конечном счете, std::string
- это действительно std::vector
под другим именем, с немного другим фокусом и намерением.Итак:
- так же, как
std::vector
, std::string
имеет либо элемент данных размера, либо оба элемента с начальным и конечным данными; - точно так же, как
std::vector
, std::string
не заботится о значении его элементов, встроенных NUL или других.
std::string
- это не строка C с синтаксическим сахаром, служебными функциями и некоторой инкапсуляцией, как std::vector<T>
не T[]
с синтаксическим сахаром, служебными функциями и некоторой инкапсуляцией.