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

Nea*_*eal 5 c++ vector

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

Ker*_* SB 12

在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));
}
Run Code Online (Sandbox Code Playgroud)

除此之外,你肯定不能比一个循环更好.您必须至少触摸一次每个元素,这样才能达到效率.

请注意,如果元素类型本身具有比复制更好的移动语义,则移动只会产生差异.对于ints或任何POD,情况并非如此.但是,通常编写代码并不会有什么坏处,这样您就可以在将来的情况下利用它.

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

  • 哇,从不知道`make_move_iterator`,+1 (2认同)