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