from 30

30歳からwebエンジニアになったけど、思ったよりも苦しいので、その苦闘の記録をば

C++をやってみる

経緯

『プログラマーが知るべき97のこと』を読んでいて、他のパラダイムの言語を習得することで、元の言語の理解も深まる旨記載があった。

目下、目の前の仕事を楽にするにはもっとコーディングがうまくなる必要があると考えている。

コーディングが上手いってなんだろう。。。と考えてみるとどうやら3つくらいにわかれるのかもしれない。

  1. アルゴリズムとデータ構造をしっかり理解し、メモリや計算時間の最適化を目指す
  2. デザインパターン等を理解し、目の前のワークロードを適切にモデリングし、コードに落とし込める
  3. フレームワークIDEを使いこなして開発効率を高める

いずれも大事だけど、なんとなく1.の習得に時間がかかりそうだと思い、アルゴリズムに挑戦しようと思う。

そうなってくると必然目につくのが、競プロ(特にAtCoder)なわけだが、多くの解説がC++で書かれている。

ということで、C++の習得を最近は目指している。

やっていること

簡単な基礎の文法はUdemyの講座を一周流してみた。

pointerの理解は曖昧だが、まだ仕事で書くわけではないのでいったん放置。

で、今はけんちょんさんの本を勉強中。

備忘

で、ここからは本題だけど、ちょっとしたSyntaxとかでメモしておきたいことをここにメモしておく。

1. C++ 11を使う

C++コンパイルをするときはg++コマンドを打っている。 xcodeとともにinstallされたg++だとversion11の公文(範囲loop, auto型など)は使えない。 (ちょっとこのへんのツールの理解は曖昧です)

対症療法的にですが、

$ g++ --std=c++11 <file/path>

で使用可能になった。

2. vectorいじり

pythonとかjsから入門した私からしたら、配列というのは言わずもがな可変長なのだが、CやC++の配列は定義時に長さを指定する必要がある。

そこで、vectorというSTLを使用する。 STLとはStandard Template Libraryの略で、 内部的にC++のTemplate構文(型を変数みたいに扱う)を使っていろんな局面で使えるようにしているLibraryのことである。

なお、あんまりvectorでは個別要素の操作は想定していないようである。

#include <vector> // STLの読込み

vector<int> a; // aというvectorを定義

a.assign(50, -1) // 50の長さをvectorを初期値-1で初期化