C++オンラインコンパイラ&デバッガー

サーバーモードのGDBでブレークポイント、変数確認、ステップ実行を使ってC++をデバッグできます。

🚀 2,392,395 合計実行 (21 今月)
出力

C++のコーディングチャレンジで練習

このエディタで実践的な問題を解こう。サンプルテストを実行し、提出してAIコードレビューを受けられます。

すべてのC++チャレンジ
簡単

Average of Three

Average three whole numbers.

学べること 算術除算
BeginnerLearning-pathVariables
簡単

Rectangle Perimeter

Compute the perimeter of a rectangle from its sides.

学べること 算術戻り値
BeginnerLearning-pathVariables
中級

遺伝的アルゴリズムの 1 世代

トーナメント選択、一点交叉、突然変異でビット列の次の世代を作ります。

学べること 遺伝的アルゴリズム進化的探索
OptimizationSimulationai
まだ解答がありません
簡単

ε-greedy による多腕バンディット

ε-greedy な行動選択で、多腕バンディットの探索と活用のバランスを取ります。

学べること 探索と活用バンディット
強化学習ai機械学習
まだ解答がありません
簡単

マルコフ連鎖の状態分布

マルコフ連鎖の遷移行列を使って、確率分布を指定したステップ数だけ伝播させます。

学べること マルコフ連鎖確率
Simulationaimath
まだ解答がありません
中級

価値反復法

ベルマン最適方程式による更新を繰り返し、マルコフ決定過程の各状態の価値を計算します。

学べること ベルマン方程式マルコフ決定過程
強化学習ai機械学習
まだ解答がありません
中級

アルファベータ枝刈り

アルファベータ枝刈り付きのミニマックスでゲーム木を評価し、実際に調べた葉の数を数えます。

学べること アルファベータ枝刈りゲーム探索
RecursionTreesai
まだ解答がありません
中級

ミニマックスで三目並べ

ミニマックスでゲーム木全体を探索し、三目並べの完璧な一手を選びます。

学べること ミニマックスゲーム木
Recursionai
まだ解答がありません
中級

重み付きグリッド上の A* 探索

ゲームやロボットの経路探索を支える A* で、地形コストのグリッドを横切る最安の経路を求めます。

学べること A* 探索ヒューリスティック
GraphsGridsShortest-pathai
まだ解答がありません
中級

温度と Top-K によるサンプリング

言語モデルと同じように、上位 k 個のロジットを残し、温度を適用してから次のトークンをサンプリングします。

学べること テキスト生成サンプリング
ai機械学習
まだ解答がありません
難しい

マルチヘッド・セルフアテンション

入力をクエリ、キー、値に射影し、複数のヘッドで並列にアテンションを計算して結合します。

学べること マルチヘッドアテンション行列による射影
ai機械学習
まだ解答がありません
中級

レイヤー正規化

各行を平均 0、分散 1 に正規化してからスケーリングとシフトを行います。すべての Transformer ブロックで使われます。

学べること レイヤー正規化Transformer
ニューラルネットワークai機械学習
まだ解答がありません

トピックから探す

実践コード、出力、メモリモデル、データ構造、アルゴリズム、モダンC++を通してCとC++を比較しながら学びます。

C/C++サンプル →

💻 このC++オンライン実行ツールについて

CodeUtility C++ Executor を使えば、ブラウザ上で直接C++コードを書いて実行できます — インストールやコンパイラ設定は一切不要です。安全なサンドボックスで動作し、 C++11、C++14、C++17から最新バージョンまでの実際のC++標準に対応しています。

このツールはクラウド上で動作する本物のC++コンパイラでコードをコンパイル・実行し、 バージョン間で正確かつ一貫した挙動を保証します。変数、関数、ループ、条件分岐、 オブジェクト指向といったC++の基本概念を自由に試せます。

面接の準備、モダンC++の学習、アルゴリズムのロジック検証など、どんな用途でも、 CodeUtility C++ Executor は、どのデバイスからでもすぐにコードを実行できるシンプルかつ強力な環境を提供します。

単なるコードランナーではありません

同じ実行環境で、複数ファイル対応エディター、分離された実行ターミナル、ランタイム別ライブラリ、永続ワークスペース、共有、リアルタイム共同作業を利用できます。

この実行環境の使い方

ランタイムを選択し、ファイルを開くか作成してコードを記述し、[実行]を選択します。出力はターミナルに表示されます。サインインしたユーザーは、ワークスペースにファイルを保存し、ライブラリをインストールして、共有を通じて共同作業できます。

  1. バージョンを選択して現在のファイルを編集するか、ワークスペース内の別のファイルを開きます。
  2. コードを実行し、求められた場合はターミナルに入力して、保存された実行履歴を確認します。
  3. 複数のコードスニペットが必要な作業では、ライブラリ、ワークスペースツール、共有、チャットを利用します。

💡 上で試せるC++の基本とサンプル

1. 変数と定数の宣言

C++では、各変数の型を宣言する必要があります。constを使うと、初期化後に変更できない読み取り専用の値を定義できます。

int age = 30;
double pi = 3.14159;
char grade = 'A';
std::string name = "Alice";
bool isActive = true;

// 定数
const int MAX_USERS = 100;
const std::string COMPANY = "CodeUtility";

// const を変更しようとするとコンパイル時エラーになります
// MAX_USERS = 200; // ❌ エラー

2. 条件分岐(if / switch)

分岐にはif、else if、elseを使います。複数の値を扱う場合はswitchを使います。

int x = 2;
if (x == 1) {
    std::cout << "1\n";
} else if (x == 2) {
    std::cout << "2\n";
} else {
    std::cout << "その他\n";
}

// switch文
switch (x) {
    case 1:
        std::cout << "1\n";
        break;
    case 2:
        std::cout << "2\n";
        break;
    default:
        std::cout << "その他\n";
}

3. ループ

for、while、do-whileでコードブロックを繰り返します。

for (int i = 0; i < 3; i++) {
    std::cout << i << "\n";
}

int n = 3;
while (n > 0) {
    std::cout << n << "\n";
    n--;
}

4. 配列

配列は同じ型の要素を複数格納します。

int numbers[3] = {10, 20, 30};
std::cout << numbers[1] << "\n";

5. 配列/ベクターの操作

動的配列にはstd::vectorを使います。

#include <vector>

std::vector nums = {1, 2, 3};
nums.push_back(4);
nums.pop_back();

for (int n : nums) {
    std::cout << n << " ";
}

6. コンソール入出力

入力にはstd::cin、出力にはstd::coutを使います。

std::string name;
std::cout << "あなたの名前を入力してください: ";
std::cin >> name;
std::cout << "こんにちは、" << name << "\n";

7. 関数

関数は再利用可能な処理をまとめます。引数と戻り値の型を指定します。

int add(int a, int b) {
    return a + b;
}

std::cout << add(3, 4);

8. マップ

std::map は辞書のようにキーと値のペアを格納します。

#include <map>

std::map ages;
ages["Alice"] = 30;
std::cout << ages["Alice"];

9. 例外処理

try と catch を使って実行時エラーを処理します。

try {
    throw std::runtime_error("エラーが発生しました");
} catch (const std::exception& e) {
    std::cout << e.what();
}

10. ファイル入出力

fstream を使ってファイルの読み書きを行います。

#include <fstream>

std::ofstream out("file.txt");
out << "こんにちは、ファイル";
out.close();

std::ifstream in("file.txt");
std::string line;
getline(in, line);
std::cout << line;
in.close();

11. 文字列操作

C++の文字列は length()、substr()、find() といったメソッドをサポートしています。

std::string text = "Hello World";
std::cout << text.length();
std::cout << text.substr(0, 5);
std::cout << text.find("World");

12. クラスとオブジェクト

C++はクラスを使ったオブジェクト指向プログラミングをサポートしています。

class Person {
  public:
    std::string name;
    Person(std::string n) : name(n) {}
    void greet() { std::cout << "こんにちは、私は " << name; }
};

Person p("Alice");
p.greet();

13. ポインタ

ポインタは別の変数のメモリアドレスを保持します。アドレスを取得するには &、 参照外し(そのアドレスの値にアクセス)には * を使います。

int x = 10;
int* ptr = &x;

std::cout << "x の値: " << x << "\n";
std::cout << "x のアドレス: " << ptr << "\n";
std::cout << "ポインタ経由の値: " << *ptr << "\n";

// ポインタ経由で x を変更
*ptr = 20;
std::cout << "更新後の x: " << x << "\n";

🐞 %{language}コードをオンラインでデバッグする方法

オンライン%{language}デバッガーなら、コンパイラやIDEをインストールせずに実行時エラーやロジックエラーを調査できます。サーバーモードはデバッグ情報付きでコンパイルし、GDBで実行します。

  1. 行番号の横にブレークポイントを設定します。
  2. Debugを選択してコンパイルし、最初のブレークポイントで停止します。
  3. 現在行、コールスタック、変数を確認します。
  4. Continue、Step Over、Step Into、Step Outで実行を制御します。
  5. 終了するときはStopを選択します。

再現可能な小さなコードから始め、想定外の動作が起きる直前にブレークポイントを置きましょう。