C++ sqlite3_步骤和结果数

C++ sqlite3_步骤和结果数,c++,sqlite,stdvector,C++,Sqlite,Stdvector,在执行语句的sqlite3\u prepare\u v2()之后,我需要sqlite3\u step()it 现在,让我们忽略所有返回值,除了SQLITE3\u行和SQLITE3\u完成 只要sqlite3\u step()的返回值是sqlite3\u ROW,我就需要一直调用它,直到得到所有结果。那么最后一个返回值将是SQLITE3\u DONE 我正在使用push_back()将结果输入到std::vector中 根据我所读到的,由于向量内部数组的大小调整,这应该具有O(log(n))的平均

在执行语句的
sqlite3\u prepare\u v2()
之后,我需要
sqlite3\u step()
it

现在,让我们忽略所有返回值,除了
SQLITE3\u行
SQLITE3\u完成

只要
sqlite3\u step()
的返回值是
sqlite3\u ROW
,我就需要一直调用它,直到得到所有结果。那么最后一个返回值将是
SQLITE3\u DONE

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

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

但是从SQLITE3API中,我看不到一个函数返回我将得到的结果总数,然后我
sqlite3\u step()
it


如何使用sqlite3实现这一点?

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

还在这儿吗?好的,让我再告诉你一件事:调整向量的大小可能有任何复杂,这取决于C++标准库的实现。它可能是
O(1)
O(n)
O(logn)
,等等。但有一件事是肯定的:如果你从数据库中得到了n个结果,你不会仅仅因为你有。。。N结果

所以我认为您仍然不应该担心这个-
向量
快的(假设有一个相当高质量的标准库实现)。所以继续写
,而
循环和
推回()
元素一个接一个,就是这样

但是,如果您仍然被糟糕的旧向量的缓慢性吓坏了,那么下面是如何找到查询返回的行数-这是特定于SQLite的:

SELECT COUNT(*) FROM the_table WHERE some_condition;

此外,还有一些可能性,如回答中所述。

No。这不是瓶颈,执行
SELECT COUNT
reserve()
可能比不执行
reserve()
的情况下执行
push_back()
要慢。我正在使用GNU STL。我只是想知道是否有一种便宜的方法来找出结果的数量,这样我就可以进行微观优化,但是如果
SELECT COUNT
是唯一的方法,那么这对我来说太贵了,因为它会对另一个SQL查询进行额外编译。是的,我知道没有必要在不必要的地方过度优化。@ruben2020非常好。然后,在
goto
指令处跳转:)