クラスの設計を解き明かす
`BitcoinExchange`クラスは、ビットコインの価格計算に関する全てのロジックを一つにまとめるために設計されました。このツールで、その構造、データ管理の心臓部、そして処理の流れをインタラクティブに探求しましょう。
クラスの構造
このクラスは、データを保持する「メンバー変数」と、操作を行う「メンバー関数」から構成されています。関数は外部から呼び出す`public`なものと、内部でのみ使う`private`なヘルパーに分かれています。各要素にカーソルを合わせると詳細が表示されます。
class BitcoinExchange
public:
BitcoinExchange() / ~BitcoinExchange()
void loadDatabase(...)
void processInputFile(...)
private:
std::map _exchangeRates;
bool isValidDate(...)
bool isValidValue(...)
std::string trim(...)
心臓部: なぜ`std::map`なのか?
`_exchangeRates`は単なるデータ置き場ではありません。`std::map`を採用したことで、データが自動的にソートされ、**対数時間 `O(log N)`** での高速検索が可能になります。もし単純なリスト(`O(N)`)を使っていたら、データが増えるほど性能は劇的に悪化していました。
スライダーを動かして、データ件数が増えた時の検索ステップ数の伸び方の違いをグラフで確認してください。
処理の流れをシミュレーション
`processInputFile`が呼び出されると、内部ではどのような処理が順番に行われるのでしょうか。「シミュレーション開始」ボタンを押して、入力ファイルの一行が処理される流れをステップごとに追いかけてみましょう。
1. 行の分割
→
2. データ検証
→
3. レート検索
→
4. 計算 & 出力