簡體   English   中英

將元素從向量A反向移動到向量B(不為空)

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM