gpt4 book ai didi

c++ - 构建和返回复杂结果数据集的有效方法

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

通常,一个函数会构造一个复杂的结果,例如 vector的对象。在普通的、未优化的 C++ 中,这很容易导致许多中间拷贝。我想知道我应该如何构造这样一个对象以避免不必要的复制。

下面的函数展示了我想做什么以及如何天真地实现它。 db 上的来电只是粗略显示函数结构的伪代码。

vector<Result> get_result(Query q){
vector<Result> ret;
db.start_query(q);
while(db.has_more()){
int i = db.get_next_int("i");
string s = db.get_next_str("s");
Result result(i, s);
ret.push_back(result); // copy on push
}
return ret; // copy on return
}

考虑到现代 C++11 或更新版本以及 move 语义,我应该如何实现这种功能?可以更改函数的签名,以便 vector<Result>可以成为捕获结果的输入参数。

最佳答案

您所能做的就是使用 emplace_back 就地构造 result 从而避免复制,而且由于 NRVO 的原因,返回时可能没有复制。

ret.emplace_back(i, db.get_next("s"));

无论如何,由于 VS2017 中 vector 的大小是 32 字节,因此它非常轻量并且 move 操作很快,因此如果您使用数据库,这可能并不重要。

关于c++ - 构建和返回复杂结果数据集的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48885525/

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