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

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

push_back, push_front, std::list

リスト list

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

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