エンジニアリングとお絵描き

お絵描きが趣味のエンジニアが、誰かの為になりそうなことや未来の自分の助けになりそうなことを書き残します.

C++でVectorに触れた

画像処理100本ノック、問32番へ取り組んだ際に問題が発生したので記録します。 github.com

double型の複素数を要素に持つ二次元配列を使用したらVisual Studioに怒られました。 スタック領域では16KBまでしか使えないとかなんとか...

docs.microsoft.com

そこで友人の力を借りてVector型について学び、無事解決できました。

怒られたコード

〜
struct fourier_str {
    std::complex<double> coef[height][width];
};
〜

修正したコード

〜
struct fourier_str {
    std::vector<std::vector<std::complex<double> > > coef;
    fourier_str() : coef(height,std:: vector<std::complex<double> >(width)) {}
};
〜

f:id:pengin_0_maru:20200518011835p:plain
Vectorを使った2次元配列的な考え(友人作)

[5月18日追記]

二次元配列を使用して怒られた際には、作成した構造体を引数に持つ関数を幾つか作成するプログラムでしたが、これをすべてmain関数にまとめてしまうと怒られなくなりました...。 謎は深まる...。