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
指令处跳转:)