クラスの宣言:
一度の#pragma #ifndefの__NROOKS_HEADER__ の#define __NROOKS_HEADER__ の#include "sampler.h" 公共サンプラー{:クラスNRooks 公共: NRooks(); 〜NRooks(); NRooks(CONST整数SAMPS)。 NRooks(CONST整数SAMPS、CONST整数セット)。 NRooks(のconst NRooks&NR); NRooks&演算子=(CONST NRooks&NR)。 仮想サンプラー*クローン()constは、 仮想空generate_samples(); プライベート: 無効shuffled_x_coordinates(); 空shuffled_y_coordinates(); }。 #endifの
クラスの実装:
#include "pch.h" の#include "nrooks.h" NRooks :: NRooks():サンプラー(){ generate_samples()。 } NRooks ::〜NRooks(){} NRooks :: NRooks(CONST整数SAMPS):サンプラー(SAMPS){ generate_samples()。 } NRooks :: NRooks(CONST整数SAMPS、CONST整数セット):サンプラー(SAMPS、セット){ generate_samples()。 } NRooks :: NRooks(CONST NRooks&NR):サンプラー(NR){ generate_samples()。 } NRooks&NRooks ::演算子=(CONST NRooks&NR){ (この==&NR)であれば リターン*この; サンプラー::演算子=(NR)。 *これを返します。 } サンプラー* NRooks ::クローン()constは{ (この*)新しいNRooksを返します。 ボイドNRooks :: generate_samples(){ (I = 0の整数であり; I <nsets; I ++)用の ため(J整数= 0; J <nsamples; J ++){ ポイント2 SP((J + random_ldouble())/ nsamples、(J + random_ldouble())/ nsamples)。 samples.push_back(SP)。 } shuffled_x_coordinates()。 shuffled_y_coordinates(); } ボイドNRooks :: shuffled_x_coordinates(){ ための(I 0 =整数; I <nsets; I ++) のための(整数J = 0; J <nsamples - 1; jは++){ K INTEGER = random_integer()%のI + nsamples * nsamples ; STD ::スワップ(サンプル[I * nsamples + J + 1] .X、サンプル[K] .X)。 } } ボイドNRooks :: shuffled_y_coordinates(){ ための式(I = 0の整数であり; I <nsets; I ++) (; J <nsamples - 1、整数j = 0、J ++)のために{ 整数k = random_integer()%のnsamples + I * nsamples。 STD ::スワップ(サンプル[I * nsamples + J + 1] .Y、サンプル[K]・Y) } }
テスト結果は、グラフ: