2015-07-25 3 views
-1

length() возвращает количество символов в строке, а size() возвращает size_t, который также является тем же, но используется, чтобы сделать его совместимым с другими контейнерами STL.Какая скорость C++ String length() или size()?

Для вычисления length() строка выполняет итерацию по всем символам и подсчитывает длину. Итак, O(n) раз.

Есть size() также такие же?

Или размер переменной можно вычислить непосредственно в O(1) времени?

Итак, мой вопрос в том, что они одинаковы с точки зрения скорости (как в том, как они рассчитаны), или это размер, вычисляемый в O(1) времени?

+0

Попробуйте запустить цикл над набором данных (и вычислить время), вы узнаете, какой из них быстро. –

+4

Что заставляет вас думать, что 'length()' is O (n)? –

+0

O (n) в размере ввода? потому что ему придется перебирать все символы строки? – ronilp

ответ

4

Оба имеют одинаковую сложность: постоянная.

Из рабочего проекта N4431, §21.4.4

size_type size() const noexcept;

Возвращает: Подсчет количества полукокса подобных объектов в настоящее время в строке. Сложность: постоянное время.

И

size_type length() const noexcept;

Возвращает: размер().


[...] итерацию через все символы и подсчитывает длину [...]

Это строки C вы думаете.

2

Если вы посмотрите документацию here, то это говорит о том, что length и size - это то же самое.

Обе строки :: размер и строка :: длина являются синонимами и возвращают одинаковое значение.

Также, если вы посмотрите на код, длина кэшируется, поэтому сложность O(1). (Код из MS-реализации, но я уверен, что другие библиотеки выполняются одинаково).

size_type length() const _NOEXCEPT 
    { // return length of sequence 
    return (this->_Mysize); 
    } 

size_type size() const _NOEXCEPT 
    { // return length of sequence 
    return (this->_Mysize); 
    } 
0

Они эквивалентны. Кроме того, строки не учитывают символы при возврате размера, это массивы символов, если строки всегда подсчитывают символы, тогда они будут слишком медленными.