コンストラクタの初期化構文

struct S{
    int a, b, c;
    S(int a, int b, int c):a(a),b(b),c(c){}
};

vector<S> v;

v.push_back(S(1,2,3));

これをデフォルトコンストラクタと書いてあるページもあったけど、ポケットリファレンスにはデフォルトコンストラクタは仮引数をひとつも持たないと書いてあったのでうーん?といった感じだ。

ファイルを開く

// 同じ意味 rは読み込みモード(省略時もこれ)
file = open("hoge.txt", "r:UTF-8")
file = File.open("hoge.txt", "r:UTF-8")

// 読み書き両用モード
file = open("hoge.txt", "r+:UTF-8")

// 追加書き込みモード
file = open("hoge.txt", "a:UTF-8")

// 追加書き込み読み込み両用モード
file = open("hoge.txt", "a+:UTF-8")

std::distance

イテレータはわかるんだけど添字がほしいなってとき。

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

vector<int> v;
vector<int>::iterator it;

// VALUEと同じかそれ以上の値のイテレータを求める
it = lower_bound(v.begin(),v.end(), VALUE);
// その値の添字を求める
int pos = distance(v.begin(), it);

あとから気づいたけど、イテレータがわかっているのだからそれだけでよかった。

参考
std::distance - cplusplus.com
vectorの指定したiteratorの要素番号を取得する

std::lower_bound

同じかそれ以上の値が出現する場所のイテレータを返す。

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

vector<int> v;
vector<int>::iterator pos;

for(int i = 0; i < 100; i++){
  v.push_back(i);
}

pos = lower_bound(v.begin(), v.end(), 10);
int num = *pos;
cout << num << endl;
// 10

num = *(++pos);
cout << num << endl;
// 11

参考
std::lower_bound - cplusplus.com
lower_bound - C/C++ 入門