とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

push_back, push_front, std::deque

両頭待ち行列 deque

ex06-05 を次のように少し書き換えるだけですぐ動作させることができる。
vector -> deque // コンテナ変更
v2.insert(v2.begin(), *i); -> v2.push_back(*i); // 効率のため
STL―標準テンプレートライブラリによるC++プログラミング 第2版

// P144 ex06-09.cpp
#include<iostream>
#include<string>
#include<deque>
#include<cassert>
#include<algorithm>
int main(){
 using std::cout;
 using std::endl;
 using std::string;
 using std::deque;
 using std::reverse;
 {
  cout << "Demonstrating deque push_back function" << endl;
  const string s1("Bjarne Stroustrup");
  const deque<char> v1(s1.begin(), s1.end());
  deque<char> v2;
  deque<char>::const_iterator i = v1.begin();
  const deque<char>::const_iterator end = v1.end();
  for(; i != end; ++i)
   v2.push_back(*i);
  assert(v1 == v2);
 }
 {
  cout << "Demonstrating deque insertion at beginning" << endl;
  const string s1("Bjarne Stroustrup"), s2("purtsuortS enrajB");
  const deque<char> v1(s1.begin(), s1.end());
  deque<char> v2;
  deque<char>::const_iterator i = v1.begin();
  const deque<char>::const_iterator end = v1.end();
  for(; i != end; ++i)
   v2.push_front(*i);
  assert(v2 == deque<char>(s2.begin(), s2.end()));
  reverse(v2.begin(), v2.end());
  assert(v1 == v2);
 }
}