STEP 1 で扱った iostream / string / vector / auto / 範囲 for / sort の総合確認クイズです。全 12 問、カテゴリ別に採点されます。選択問題・穴埋め・出力予測が混ざっています。回答すると即座に解説が表示され、上部のスコアバーが伸びていきます。
<< は左から順に出力。区切りは入りません。「1 2 3」と空白区切りで出したいなら std::cout << 1 << " " << 2 << " " << 3; と自分で空白を挟む必要があります。std::endl の振る舞いとして正しいものは?"\n" と全く同じ\r\n を出すendl は「改行 + flush」。ループで大量に呼ぶと遅くなるので、通常は "\n" を使い、即時表示が必要な箇所だけ endl を使うのが現代の流儀です。strcmp(s1, s2) == 0s1 == s2&s1 == &s2s1.compare(s2) がそのまま boolstd::string は == がオーバーロードされているので自然に比較できます。compare() は存在しますが、戻り値は int(-1/0/+1)なので bool として直接使うと 0 でない戻り値で「true」になってしまい意図が逆転します。pos の値は?find の戻り値は符号なし整数 size_t。見つからないときに -1 は返せないので、代わりに std::string::npos(size_t の最大値)が返ります。if (pos == std::string::npos) がイディオム。s の長さを取得する最も推奨される書き方。size() または length()(どちらも同じ)。string / vector / list など STL の多くのコンテナが size() を持つので、習慣として size() を使うのが無難です。v.size() と v.capacity() の関係として常に正しいものは?reserve は capacity だけを増やし、size は変えません。そのあと 1 回 push_back すれば size は 1 に。capacity は reserve で確保した 100 のまま(push_back の段階では再確保不要)。(10, -1)。std::vector<int> v(10, -1); で「10 要素、全部 -1」の vector が作れます。第 1 引数が要素数、第 2 引数が初期値。1 引数版 v(10) は「10 要素、全部 0」になります。v の中身は?auto x : v は値コピー。x += 10 はコピーを書き換えているだけで、v 自体は変わりません。書き換えたいなら for (auto& x : v)(参照)にします。「値が更新されない」あるあるの王様。const auto& ならコピーゼロ(速い)、かつ const で不用意な書き換えも防げる(安全)。string/vector/クラスを読むときの既定の書き方です。小さい型(int など)なら値コピー auto でも構いません。a > b が真のとき a を左(= 降順)。std::greater<>{} を渡しても同じ効果が得られます。②の begin/end 逆は未定義動作、④のような関数は存在しません。partial_sort。std::partial_sort(first, middle, last) は [first, middle) に「もし全体をソートしたとき先頭に来る要素」を入れ、残りは未定順。「トップ K 個だけ欲しい」ケースで sort より速いことがあります。