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

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

push_back, insert, std::vector

STL―標準テンプレートライブラリによるC++プログラミング 第2版
末尾への追加なら insert より push_back するべし。複数の要素を insert する必要があるなら範囲形式の insert を使うべし。何度も insert するくらいなら vector 以外のふさわしいコンテナ (list など) を使うべし。

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