Станд.:: размер строки () O (1) операция?

SetBooks устанавливает ценность книг как обещание.

firebase.getBooks () возвращает обещание.

Так вот почему у вас в книгах есть обещание.

Что вы должны сделать

async function fetchMyAPI() {

  const response = await firebase.getBooks();
  setBooks(response);
}

useEffect(() => {
  fetchMyAPI();
}, []);
26
задан Brian R. Bondy 1 November 2008 в 22:40
поделиться

6 ответов

Если Вы спрашиваете если реализация MSVC строки:: размер () имеет постоянную сложность, тогда ответ - да. Но Don Wakefield упомянутая Таблица 65 в 23.1 из Стандарта C++, где это говорит, что сложность size() должна следовать за тем, что сказано в 'Примечании A'. В примечании A говорится:

Те записи отметили Ԡ˜ (Примечание A) ’’ должен иметь постоянную сложность.

Однако, который не означает, что те записи должны быть , имеют постоянную сложность. Стандарты используют очень определенную терминологию, и "если" означает, что это не обязательно.

'Примечание A' было добавлено к стандарту конкретно для успокоения тех, кто полагал, что size() должен быть позволен иметь линейную сложность, таким образом, не было бы необходимо сохранить размер, когда контейнеры были изменены.

, Таким образом, Вы не можете полагаться size() имеющая постоянная сложность, но я честно не уверен, существуют ли какие-либо реализации, которые не имеют константы string::size().

32
ответ дан 28 November 2019 в 06:55
поделиться

Вот простой способ ответить на тот вопрос для msvc ++.

Запись некоторый код в проекте:

string happy;
happy.size();

Hilight вызов .size, щелкните правой кнопкой, перейдите к определению.

На моей установке (vs2005sp1) это отправляет меня в xstring:1635, который похож на это:

size_type __CLR_OR_THIS_CALL size() const
    {   // return length of sequence
    return (_Mysize);
    }

, Таким образом, это похоже, строка имеет участника, названного _Mysize, и это просто возвращает это.

, Другими словами, это - O (1) реализация.

7
ответ дан 28 November 2019 в 06:55
поделиться

Да, станд.:: строка:: размер () является O (1).

6
ответ дан 28 November 2019 в 06:55
поделиться

Посмотрите Таблицу 65 в Разделе 23.1 из Стандарта. "a.size ()" перечислен как" (Примечание A)", в котором говорится, что "Те записи... должны иметь постоянную сложность".

Раздел 21.3 говорит, что строки соответствуют требованиям последовательности (23.1), в силу самого факта, размер () является постоянным временем.

5
ответ дан 28 November 2019 в 06:55
поделиться

Производительность, как гарантирует STL, будет, по крайней мере, O (N) для контейнеров, однако многих контейнеров включая станд.:: строка может реализовать это как O (1), и будет. Обычно это будет или возвращать простую переменную или делать что-то как _End - _Begin и возврат это.

2
ответ дан 28 November 2019 в 06:55
поделиться
size_type __CLR_OR_THIS_CALL size() const

{   // return length of sequence

    return (_Mysize);

}

, Таким образом, это в конечном счете могло бы быть похожим на это, но Вы никогда не можете быть уверены.

-2
ответ дан 28 November 2019 в 06:55
поделиться
Другие вопросы по тегам:

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