gpt4 book ai didi

c++ - sqlite3_step 和结果数

转载 作者:行者123 更新时间:2023-11-30 04:16:44 25 4
gpt4 key购买 nike

在我做了一个sqlite3_prepare_v2()语句之后,我需要sqlite3_step()它。

目前,让我们忽略除 SQLITE3_ROWSQLITE3_DONE 之外的所有返回值。

只要sqlite3_step()的返回值为SQLITE3_ROW,我就需要一直调用它,直到得到所有结果。那么最后的返回值将是 SQLITE3_DONE

我正在使用 push_back() 将我的结果输入到 std::vector 中。

根据我的阅读,由于 vector 内部数组的大小调整,这应该具有 O(log(n)) 的平均复杂度。为了将这种复杂性降低到 O(1),我需要在执行 push_back() 之前使用 vector 的 reserve()

但是在我 sqlite3_step() 之前,我无法从 sqlite3 API 中看到返回结果总数的函数。

我如何使用 sqlite3 执行此操作?

最佳答案

首先:您是否对其进行了基准测试?这是瓶颈吗?如果不是,那么现在就不要再担心效率和复杂性了,转到答案结尾

还在吗?好的,让我再告诉你一件事:调整 vector 的大小可能很复杂,这取决于 C++ 标准库的实现者。它可能是 O(1)O(n)O(log n) 等。但有一件事是肯定的:如果你从数据库中获得了 N 个结果,您不会在 O(n) 中检索数据。只是因为您有... N 个结果。

所以我认为您仍然不必担心这一点 - vector快速(假设有相当高质量的标准库实现)。因此,继续编写 while 循环和 push_back() 一个接一个的元素,仅此而已。

但是,如果您仍然被糟糕的旧 vector 的缓慢所吓到,那么这里是您如何找到从查询返回的行数的方法 - 这是特定于 SQLite 的:

SELECT COUNT(*) FROM the_table WHERE some_condition;

此外,还有更多可能性,如对 this question 的回答中所述。 .

关于c++ - sqlite3_step 和结果数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17594821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com