我目前在项目中有以下代码:
std::vector<int> vectorOfFirsts;
std::set<double> setOfSeconds;
std::list<std::pair<int,double>> cachedList;
// do something to fill the list
for (const auto& pair : cachedList)
{
vectorOfFirsts.push_back(pair.first);
setOfSeconds.insert(pair.second);
}
该列表将非常大,并且仅用于填充向量和集合(即,其内容可以无效).我现在的问题是,如果以下优化是一个好主意:
for (const auto& pair : cachedList)
{
vectorOfFirsts.push_back(std::move(pair.first));
setOfSeconds.insert(std::move(pair.second));
}
调用std :: move on pair.first会以某种方式使pair.second无效吗?这段代码会为循环提供任何加速吗?我知道填充矢量/集而不是列表可能是个好主意,但是列表是通过一些我无法控制/没有时间挖掘的遗留代码来填充的.
解决方法:
Will calling std::move on pair.first somehow invalidate pair.second?
第一和第二是完全不同的变量发生在一些类对象中.移动一个不会影响另一个.
And will this code provide any speedup for the loop?
这取决于类型.移动的关键是基本上转移资源.由于这里的对是int和double,因此没有涉及资源,所以没有什么可以转移的.如果它是一对矩阵类型和一些张量类型,每个都有一些内部动态分配的缓冲区,那么它可能会提高性能.
标签:std-pair,c,move 来源: https://codeday.me/bug/20190724/1525518.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。