!STLやPythonで範囲指定の多くは左閉半開区間を基調にしています。std::string::substrでの範囲指定は大きく異なり、戸惑います。気が付くと実装時に繰り返し同じことを考え、無駄を感じていたのでまとめてみました。Referenceからの抜粋したstd::string::substrの書式です。Reference冒頭で触れたように、STLでは左閉半開区間での範囲指定を基調としていますが、std::string::substrではposとlen、つまり、位置と長さで範囲を指定します。位置は0ベースで指定します。指定した範囲が文字列の後ろ側にはみ出してしまっても適切に処理をします。第2引数は省略可能で、デフォルトの値はstd::string::nposです。これを用いると、文字列の最後までが処理の対象になります。位置posは文字列の長さまで指定することができます。文字列の長さを指定したときは、空文字を返します。それ以降を指定すると例外が発生します。この場合、前半の文字列の長さを後半の文字列の開始位置とします。前半の開始位置が0ではない場合は以下の式を用いるとよいでしょう。後半の文字列の開始位置は前半の開始位置にその長さを足した値とします。Substrings?回文に関連する実装が苦手です。