[英]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.