c++23 にする
下記で c++23 でコンパイルできる。
g++ -std=c++23 hoge.cpp -o hoge.out
vscode のコンパイルするタスクも下記で c++23 でコンパイルできる。
{ "version": "2.0.0", "tasks": [ { "label": "c++ build for AtCoder", "type": "shell", "command": "g++", "args": [ "-g", "-O0", "-std=c++23", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}.out" ], "options": { "cwd": "${fileDirname}" }, "group": { "kind": "build", "isDefault": true } } ] }
VSCode の C/C++拡張機能は、デフォルトで C++17 までの機能をサポートしているらしく、c++20 以上を利用する際にエディタでエラーが出る場合がある。.vscode/c_cpp_properties.json
に下記を設定することで、拡張機能の c++バージョンを変更できるらしい。(実際エラー消えた)
{ "configurations": [ { "name": "Linux", "includePath": ["${workspaceFolder}/**"], "defines": [], "compilerPath": "/usr/bin/g++", "cStandard": "c17", "cppStandard": "c++23", "intelliSenseMode": "gcc-x64", "compilerArgs": ["-std=c++23"] } ], "version": 4 }
順列
ranges::next_permutation(hoge)
を使うと、引数 hoge の vector に対する、順列のパターンの次を出してくれる。[0,1,2]
を入れると、[0,2,1]
を返す。[0,2,1]
を入れると[1,0,2]
を返す。多分。要するに、全パターンを順番に取得する場合は、しっかりと昇順にソートしてから渡す必要がある。iota(hoge.begin(), hoge.end(), 0)
は、hoge の最初から最後までを 0 から始まる連続する数値で埋める関数。
#include <bits/stdc++.h> using namespace std; int main() { vector<int> cells(3); iota(cells.begin(), cells.end(), 0); do { for (auto &&c : cells) { cout << c; } cout << endl; } while (ranges::next_permutation(cells).found); }
上記の実行結果は下記になる。
012 021 102 120 201 210