2012年5月31日木曜日

整列した std::vector に挿入して、またアクセス備忘録

未だに、結構こういう、くだらない事を忘れてしまい。試すとか、よくあります。

#include <vector>
#include <iostream>
#include <algorithm>

int main() {
  std::vector<int> v;
  // 10, 20, ..., 90 と整列した配列に対して
  for( int i = 1; i < 10; ++i )  v.push_back( i * 10 );
  // 25 を挿入したい
  std::vector<int>::iterator f = std::lower_bound( v.begin(), v.end(), 25 );
  // 挿入する位置は、わかったが、後からアクセスする場合に備えて
  // 場所を覚えておきたい
  int pos = std::distance( v.begin(), f );
  // とりあえず挿入
  v.insert( f, 25 );
  // 挿入された位置は、ここですよ
  std::cout << pos << std::endl;
  // ほんまかいな?
  std::cout << v[ pos ] << std::endl;
  // ちゃんと並んでますか?
  for( int i = 0; i < 10; ++i ) { std::cout << v[i] << ","; }
}

追記: コメントもらった。 C++11 だと、insert が 挿入位置を返すので単に
  f = v.insert( f, 25 );
で、OKのようです。

0 件のコメント: