2017-11-28 10 views
2

私は現在、vector<double>のスライディングウィンドウ機能を実装しています。問題は私が傾けることはできませんcoutの値ですか?私はそれを出力するとき、私は実際の値ではなく、memeoryの場所を取得するようです..スライディングウィンドウから値を確認しますか?

私は、ウィンドウに構成されているデータを処理する必要があるので、値にアクセスすることはきれいです。

typedef double SAMPLE; 
std::vector<std::vector<SAMPLES> > loaded_files; 
//Some init 
std::vector<SAMPLE>::iterator it; 
for (it = loaded_file.samples[0].begin() ; (it + (NUM_SECONDS*SAMPLE_RATE)) != loaded_file.samples[0].end(); ++it) 
{ 
    auto window = *it; 
    std::cout << "printing the window!" << std::endl; 
    std::cout << &(window) << std::endl; // prints out memory location? 
} 
+1

[mcve]を提供してください –

+0

なぜあなたは 'window'のアドレスを取得していますか? – Mat

+0

神dammit ...はい。\ ' – Lamda

答えて

1

あなたは、ウィンドウの内容を印刷するたびに、あなたは、ウィンドウ自体を反復する必要があります。ウィンドウの幅が(NUM_SECONDS*SAMPLE_RATE)であることを

typedef double SAMPLE; 
std::vector<<SAMPLES>> loaded_files; 
//Some init 
std::vector<SAMPLE>::iterator it; 
for (it = loaded_file.samples[0].begin(); (it + (NUM_SECONDS*SAMPLE_RATE)) != loaded_file.samples[0].end(); ++it) 
{ 
    std::cout << "printing the window!" << std::endl; 
    std::vector<SAMPLE>::iterator wit; // window iterator 
    for (wit = it; wit != it + (NUM_SECONDS*SAMPLE_RATE); ++wit) 
    { 
     std::cout << *wit << ','; 
    } 
    std::cout << std::endl; 
} 

注:これはそうのようなあなたのforループの内容を変更することによって行うことができます。これは、可読性のためにwindow_widthなどの変数に格納することができます。

+0

可読性について話すときには '(it +(NUM_SECONDS * SAMPLE_RATE))'とは何ですか? – Lamda

+0

これは、幅window_width =(NUM_SECONDS * SAMPLE_RATE)のスライディングウインドウの最後を指します(過去1つ)。内側のループでは、ウィンドウを反復するために、ウィンドウ反復子 'wit'は' it'の現在の位置から開始し、 'it + window_width'で停止する必要があります。 – scrpy

0

どのウィンドウオブジェクトが保持しているかはわかりません。しかし、以下のステートメントでは、ウィンドウのアドレスを提供しています。したがって、値の代わりにアドレスを表示しています。

std::cout << &(window) << std::endl; // prints out memory location? YES 

以下のステートメントを使用してみてください -

std::cout << window << std::endl; // prints out value here 
+0

しかし、それは1つの値を印刷しています... – Lamda

+0

すべての出力を提供できますか?あなたのforループは複数回実行されていますが、同じ値を繰り返し印刷していますか? –

関連する問題