在 C++ 中将成对向量转换为两个独立向量的最快方法

2024-05-14

假设我有一个vector of pair<int,int>。现在我想提取pair.first and pair.second作为独立向量。我可以迭代向量并执行此操作,但是有更好/更快的方法吗?


在 C++11 中,如果您不再需要旧向量,您也许可以从移动语义中获得一点额外的效率:

for (auto it = std::make_move_iterator(v.begin()),
         end = std::make_move_iterator(v.end()); it != end; ++it)
{
    v1.push_back(std::move(it->first));
    v2.push_back(std::move(it->second));
}

除此之外,你当然不能比一个循环做得更好。您必须至少接触每个元素一次,因此这是最有效的。

请注意,只有当元素类型本身具有比复制更好的移动语义时,移动才会产生影响。情况并非如此ints 或任何 POD。但是通用地编写代码并没有什么坏处,这样您就可以在将来的情况下利用这一点。

但是,如果复制/移动是一个问题,您应该考虑原始矢量的某些视图适配器是否是更好的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C++ 中将成对向量转换为两个独立向量的最快方法 的相关文章

随机推荐