我想知道是否有更快捷的方法将我的数据从mysqlpp :: storequeryresult复制到std :: vector。
我的例子如下: 我在StoreQueryResult中使用query.store()存储我的查询结果,我的结果是例如一个表格,其中一列有双打。现在我想将那些双打复制到std :: vector中。我现在这样做的方法是使用[] []运算符访问每个双精度数并将其复制到for循环中的向量。
这样可行,但由于我在循环中复制了277000双,所以非常耗时。有没有办法将列复制到我的向量?事情是我的其他函数在参数列表中使用std :: vectors。或者我可以改变我的函数来调用StoreQueryResult我猜,但我会优先选择std :: vector。
这是我的简化代码:
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
提前谢谢。
马丁
答案 0 :(得分:0)
最终,如果您需要复制,那么您需要复制,无论您是自己编写循环还是获取库函数,都不是特别相关。
reserve
答案 1 :(得分:0)
您可能希望创建一个矢量,但实际上只会访问和使用某些值。
在这种情况下,我们可能会延迟从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
的{{1}}。这是一个有趣的数据类型,可以转换为许多其他类型。在您的情况下,您使用的是mysqlpp::String
。operator double () const
而不是++i
;它们不会累加多个周期,但应该使用,以保持代码的优化精神。如果那时你有类似的东西:
i++
您只会在½值上运行转换例程。
当然,如果您打算多次使用结果向量,您实际上会一次又一次地开始运行相同的转换。所以这种“优化”实际上会损害性能。