普段はpythonばっかり使い、javaをたまに触るくらいの私です。 一つ大きなタスクが片付いたので、(前々からやりたいと思っていた)C++の勉強を始めます。
その備忘録
全くの初心者ですが、根本の動作原理が分かってれば言語の違いは微々たるものだと考えてます。
C++は競プロで勉強するのがモチベーションも保てそうなので、AtCoderの問題を解きながら勉強していきます。補助書籍として、C++実践プログラミングも横において参照してます。今回はAB問題を解く中で知ったこと、つまりかなり初歩的なところを残すことにします。 コンパイラはGCCです(Clangではなく)。
pythonとの違いで印象的な部分をメモしていきます
爆速い
いうまでもないですが。速いですね。言語ごとの速度は競プロのプラットフォーム側で何やってるかにもよりますが、pythonとの違いは疑いようもないです。正確な速度比較は素人には不可能ですし、他にリソースがたくさんあると思うのでやめときます。
標準入力の変換が不要
pythonでは、標準入力はstringで受けるしかないので、入力が二つあるときはinput().split()としなければならず、さらに入力をint型で受けたいときは
first, second = map(int, input().split())
としてstr -> intへの変換を行わなければなりません。
一方でC++では、標準入力を受ける変数の型をあらかじめ定義するので、
int n; std::cin >> n;
とすれば型変換を明示的にコードとして書く必要はないです。python と C++の違いというよりは、動的型付けと静的型付け言語の違いでしょうか。
おそらく、変換が行われていないのではなく、データ型に合うように自動で変換されているんだと思います。Cも勉強している人なら知ってるような気がします、気がするだけです。
string 型
python と違って、C++では*1stringは基本型(primitive?)ではなく、使いたければそれ用にコードを書く必要があります。
#include string std::string s;
pythonはcharとstringをまとめて扱ってるので、初心者にはやさしいです。
string の各文字へのアクセス
indexingというのでしょうか、s[i]でi番目の要素にアクセスする方法([]演算子という?)。C++ではこれができる*2のですが、どうも参照先の要素が別でもエラーとかは出してくれないようです。それを避けるためにs.at(i)も推奨されてるようです*3。
数値の型
数値の精度によって型を変えるのがめんどかったりします。
個人的にはこちらのサイトがよく整理されていて使いやすかったです。 marycore.jp
char, int
charとint型が同じようにストアされていて、char型に対して加減算を行えるというのがpythonからくると忘れがちです。