読者です 読者をやめる 読者になる 読者になる

ゆとりーなの日記

日記的な事を書いて行くと思はれる

所属する某サークルの代表までもが・・・

C++始めたそうです。風の噂ですが。
一体どこまで出来るんでしょうか。この場を借りて確かめてみましょう。

隅須的C++力判定的なサムシング

Lv0
#include <iostream>

int main() {
  std::cout << "Hello World!" << std::endl;
  return 0;
}

取り敢えず"Hello World!"位は出来ますよねと。

Lv1
#include <cstdint>
#include <iostream>

int main() {
  const std::uint8_t a = 0x01;
  const std::uint8_t b = 0x02;
  std::cout << "~a:" << ~a << std::endl;
  std::cout << "a | b:" << (a | b) << std::endl;
  std::cout << "a & b:" << (a & b) << std::endl;
  std::cout << "a ^ b:" << (a ^ b) << std::endl;
  return 0;
}

ゲーム作るならビット演算くらいは分かった方がいいかもです。

lv2
#include <iostream>
#include <string>
#include <unordered_map>
#include <vector>

int main() {
  std::vector<int> v;
  v.push_back(1);
  std::cout << v[0] << std::endl;
  std::unordered_map<std::string, int> m;
  m.insert(std::make_pair("c++", 1));
  std::cout << m["c++"] << std::endl;
  return 0;
}

文字列クラスと動的配列クラス、連想配列クラス位は使えた方が良さそうですね。

lv3
#include <iostream>
#include <memory>

struct char_delete {
  void operator ()(char *ptr) const {
    std::cout << "char delete" << std::endl;
    delete ptr;
  }
};

int main() {
  const std::unique_ptr<int> p(new int(1));
  std::cout << *p << std::endl;
  const std::unique_ptr<char, char_delete> cp(new char('a'));
  std::cout << *cp << std::endl;
  const std::shared_ptr<int> sp(new int(1));
  std::cout << *sp << std::endl;
  const std::shared_ptr<char> scp1(new char('a'), char_delete());
  const std::shared_ptr<char> scp2 = scp1;
  std::cout << *scp2 << std::endl;
  return 0;
}

取り敢えずスマートポインタには親しんでおいた方が幸せになれるでしょう。win32DirectXでゲームを作るのであればカスタムデリータのお世話になる事は間違いないので指定の仕方にも親しんでおいた方がよさげですね。

lv4
#include <algorithm>
#include <array>
#include <iostream>
#include <vector>

int main() {
  const std::array<int, 4> v1 = {0, 1, 2, 3};
  std::for_each(v1.begin(), v1.end(), [](int x) {std::cout << x << " ";});
  std::cout << std::endl;
  std::vector<int> v2;
  std::copy(v1.begin(), v1.end(), std::back_inserter(v2));
  std::for_each(v2.begin(), v2.end(), [](int x) {std::cout << x << " ";});
  std::cout << std::endl;
  std::vector<int> v3;
  std::transform(v2.begin(), v2.end(), std::back_inserter(v3), [](int x) {return x * x;});
  std::for_each(v3.begin(), v3.end(), [](int x) {std::cout << x << " ";});
  std::cout << std::endl;
  std::cout << *std::find(v3.begin(), v3.end(), 4) << std::endl;
  v3.erase(std::remove_if(v3.begin(), v3.end(), [](int x) {return x < 4;}), v3.end());
  std::for_each(v3.begin(), v3.end(), [](int x) {std::cout << x << " ";});
  std::cout << std::endl;
  return 0;
}

標準のアルゴリズム位は困惑しない位の感じにはなっておいて損はない気がしますです。for文で回すのなんかかっこ悪いと思えるようになると以下略ですね。
う〜ん、なんか文法的な感じ?になってしまった感がありますね。他にもオブジェクト指向におけるお約束とか色々あるんですが、それはまたの機会にでも。あんまり過激な事書くとyappy_t氏に怒られそうな予感もしますね。
というまだ一つもゲームを完成させた事もないにわかCぷらーが通りますよと。