私はコード内でベクトルの消去関数を使用しないdequeのためのpop_front()
/pop_back()
メンバ関数の実装に取り組んでいます。 vecOne
が空であるpop_front()
についてはdeque実装でもう1つのベクトルを別のベクトルに移動する
- 場合、
vecTwo
からの要素の最初の半分は、その後、vecOne
に移動されvecOne
上pop_back()
が呼び出されます。基本的には、ここにタスクがあります。pop_back()
について vecTwo
が空の場合、vecOne
からの要素の最初の半分は、その後、pop_back()
vecTwo
上が呼び出され、vecTwo
に移動されます。
私は、次のコードを書かれているが、それはすべてのケースでは動作しません:
例えばtemplate <class T>
void Deque <T>::pop_front()
{
if (vecOne.empty() && vecTwo.empty()) {
return;
}
if (vecOne.empty()) {
if (vecTwo.size() == 1) {
vecTwo.pop_back();
} else {
for (int i = (vecTwo.size()-1)/2; i > -1; --i) {
vecOne.push_back(vecTwo[i]);
vecTwo[i] = vecTwo.back();
vecTwo.pop_back();
}
vecOne.pop_back();
}
} else {
vecOne.pop_back();
}
}
最初のベクトルvecOne
には要素がありませんが、vecTwo
は5 (60, 70, 80, 90, 100)
です。このコードでは、私は次のような結果が得られます:
vecOne
は数字を持っている60、70、および外にある(
vecTwo
は数字100を有し、かつ90(私が取得すべきかである)の順に80注文)。
私はその後、pop_back
ながら一人でvecOne
上の最後の要素を残りvecTwo
要素を残し誰かが私がvecOne
に移動しvecTwo
から要素の最初の1/2を取得しようとしていた場合、私は私が間違っているのか理解に役立つことを願ってこれは、両端キューの前面です。
なぜあなたは独自の両端キューを作成していますか? 'std :: deque'の実装(これは最適です)は、このタイプのデータを効率的に処理するリングバッファに基づいています。 –