SetBooks устанавливает ценность книг как обещание.
firebase.getBooks () возвращает обещание.
Так вот почему у вас в книгах есть обещание.
Что вы должны сделать
async function fetchMyAPI() {
const response = await firebase.getBooks();
setBooks(response);
}
useEffect(() => {
fetchMyAPI();
}, []);
Если Вы спрашиваете если реализация MSVC строки:: размер () имеет постоянную сложность, тогда ответ - да. Но Don Wakefield упомянутая Таблица 65 в 23.1 из Стандарта C++, где это говорит, что сложность size()
должна следовать за тем, что сказано в 'Примечании A'. В примечании A говорится:
Те записи отметили вЂвЂ (Примечание A) ’’ должен иметь постоянную сложность.
Однако, который не означает, что те записи должны быть , имеют постоянную сложность. Стандарты используют очень определенную терминологию, и "если" означает, что это не обязательно.
'Примечание A' было добавлено к стандарту конкретно для успокоения тех, кто полагал, что size()
должен быть позволен иметь линейную сложность, таким образом, не было бы необходимо сохранить размер, когда контейнеры были изменены.
, Таким образом, Вы не можете полагаться size()
имеющая постоянная сложность, но я честно не уверен, существуют ли какие-либо реализации, которые не имеют константы string::size()
.
Вот простой способ ответить на тот вопрос для 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) реализация.
Посмотрите Таблицу 65 в Разделе 23.1 из Стандарта. "a.size ()" перечислен как" (Примечание A)", в котором говорится, что "Те записи... должны иметь постоянную сложность".
Раздел 21.3 говорит, что строки соответствуют требованиям последовательности (23.1), в силу самого факта, размер () является постоянным временем.
Производительность, как гарантирует STL, будет, по крайней мере, O (N) для контейнеров, однако многих контейнеров включая станд.:: строка может реализовать это как O (1), и будет. Обычно это будет или возвращать простую переменную или делать что-то как _End - _Begin и возврат это.
size_type __CLR_OR_THIS_CALL size() const
{ // return length of sequence
return (_Mysize);
}
, Таким образом, это в конечном счете могло бы быть похожим на это, но Вы никогда не можете быть уверены.