[英]Move element from vector A to vector B (not empty) in reverse order
我需要将向量bacward_segment
中的所有元素按相反顺序推入forward_segment
。
这是我的代码:
for(int q = backward_segment.size()-1; q >= 0; q--){
forward_segment.push_back(backward_segment[q]);
}
但是我认为效率不高。您能建议我一个更好的解决方案吗?
如果您要初始化forward_segment
它就像
vector<T> forward_segment(backward_segment.crbegin(), backward_segment.crend());
除此以外:
forward_segment.resize(backward_segment.size());
copy(backward_segment.crbegin(), backward_segment.crend(), forward_segment.begin());
使用make_move_iterator
(请注意,我没有为此使用const迭代器)。
初始化:
vector<T> forward_segment(
make_move_iterator(backward_segment.rbegin()),
make_move_iterator(backward_segment.rend())
);
除此以外:
forward_segment.resize(backward_segment.size());
copy(
make_move_iterator(backward_segment.rbegin()),
make_move_iterator(backward_segment.rend()),
forward_segment.begin()
);
但我认为效率不高。
您不应该对此“思考”。 请改用探查器。 通过猜测进行优化几乎是行不通的。
您能建议我一个更好的解决方案吗?
你可以保留的大小forward_segment
到backward_segment
如果你希望不会有太多的重复会被跳过的规模。 可以在算法级别上进行更好的优化,例如完全跳过整个副本,但是您没有为此提供足够的信息。
您可以使用std::unique_copy
:
std::unique_copy( backward_segment.rbegin(), backward_segment.rend(),
std::back_inserter( forward_segment ),
[]( const auto &s1, const auto &s2 ) {
return s1.x == s2.x && s1.y == s2.y;
} );
(我认为)这将使其更具可读性,但是兼容性几乎相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.