其他分享
首页 > 其他分享> > c – 使用std :: move on pair.first会使pair.second无效吗?

c – 使用std :: move on pair.first会使pair.second无效吗?

作者:互联网

我目前在项目中有以下代码:

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