我想知道是否有更快的方法将我的数据从mysqlpp::storequeryresult复制到std::载体。
我的示例如下:我用query.store()将查询结果存储在StoreQueryResult中,我的结果是一个表,其中有一个列,其中包含双倍。现在,我想将这些双倍复制到std::载体中。我现在做的方法是用操作符访问每一个双,然后在一个for-循环中复制到我的向量。
这是可行的,但这是非常耗时的,因为我复制了一个循环中的277000倍。有没有办法把列复制到我的向量上?问题是,我的其他函数在参数列表中使用std::向量。或者,我可以改变我的函数来调用一个StoreQueryResult,但是我会先给出一个std::StoreQueryResult。
以下是我的简化代码:
void foo()
{
vector<double> vec;
mysqlpp::StoreQueryResult sqr;
Query query;
query << "SELECT * FROM tablename";
sqr = query.store();
vec.reserve(sqr.num_rows());
vec.resize(sqr.size());
for(int i=0; i != vec.size(); i++)
{
vec[i] = sqr[i]["my_column"];
}
}我想要这样的东西:
vec = sqr["my_column"] // when my_column is a field with doubles提前结束。
马丁
发布于 2015-02-10 12:28:03
最终,如果您需要复制,那么您就需要复制,无论您是自己编写循环,还是获得一个库函数来完成它,都不是特别相关的。
您可以做的是在目标向量中预先reserve足够的空间,以避免重复重新分配和复制:
vec.reserve(sqr.num_rows());发布于 2015-11-13 08:53:37
您可能希望创建一个向量,但实际上只会访问和使用一些值。
在这种情况下,我们可能会延迟从mysqlpp::String到另一个数据类型的转换:
std::vector<mysqlpp::String> data(res.num_rows());
for(size_t i=0, n=res.num_rows(); i<n; ++i)
{
data[i] = std::move(res[i]["value"]);
}这里发生了几件事:
vector的mysqlpp::String。这是一个有趣的数据类型,可以转换为许多其他类型。在您的例子中,您使用的是operator double () const。++i而不是i++;它们加起来并不是很多周期,但是应该使用它们来保持代码的优化精神。如果那样的话:
double sum = 0.0;
for(size_t i=0, n=data.num_rows(); i<n; i+=2)
{
sum+=double(data[i]);
}您将只在值的一半上运行转换例程。
当然,如果您计划多次使用结果向量,您实际上将开始一次又一次地运行相同的转换。因此,这种“优化”实际上会损害性能。
https://stackoverflow.com/questions/28430766
复制相似问题