C++でvectorのpop_front操作を実装します
実装するコードを書く pop_front
C++でのvectorの操作。 The pop_front
操作は、vectorから最初の要素を削除し、残りの要素の順序を維持する必要があります。
私達はことを知っています std::vector
サポートのみ push_back
と pop_back
オペレーション。両方の操作は一定時間で実行されます。 The pop_front
操作は少なくともかかります O(n) vectorがアレイに裏打ちされており、順序を維持するために残りのすべての要素を1つ左にシフトする必要があるための時間。の総数の場合 pop_front
操作はもっと、 std::list
コンテナを優先する必要があります。これは、両端Queue(deque)として実装されます。
そう pop_front
操作には線形時間がかかるため、vectorに含まれる要素が少ない場合にのみ呼び出す必要があります。これが実行可能な実装の1つです pop_front
関数。これは、vectorの最初の要素を使用して単純に消去します vector::erase
関数。 The vector::erase
関数では、vectorから削除する要素を指すイテレータが必要です。次を呼び出すことで、vectorの最初の要素へのイテレータを取得できます。 vector::begin
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <iostream> #include <vector> template<typename T> void pop_front(std::vector<T> &v) { if (v.size() > 0) { v.erase(v.begin()); } } int main() { std::vector<int> nums = { 1, 2, 3, 4, 5 }; pop_front(nums); for (int i: nums) { std::cout << i << ' '; } return 0; } |
出力:
2 3 4 5
幸いなことに、vector内の残りの要素の順序を維持する必要がない場合は、vectorの最後の要素を前面に移動することを含む定数時間のソリューションがあります。私たちはの助けを借りてこれを行うことができます std::move
関数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include <iostream> #include <vector> template<typename T> void pop_front(std::vector<T> &v) { if (v.size() > 0) { v.front() = std::move(v.back()); v.pop_back(); } } int main() { std::vector<int> nums = { 1, 2, 3, 4, 5 }; pop_front(nums); for (int i: nums) { std::cout << i << ' '; } return 0; } |
出力:
5 2 3 4
以上がすべてです pop_front
C++でのvectorの操作。