2017-11-28 1 views
2

Ich implementiere derzeit eine gleitende Fensterfunktionalität für eine vector<double>. Problem ist, ich kann cout die Werte nicht scheinen? Wenn ich es ausstelle, scheine ich eher einen Ort als die tatsächlichen Werte zu haben.Können die Werte von meinem Schiebefenster nicht berücksichtigt werden?

Ich muss die Daten verarbeiten, aus denen das Fenster besteht, also hätte ich Zugriff auf die Werte.

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

Bitte geben Sie eine [mcve] –

+0

Warum nehmen Sie die Adresse von 'window'? – Mat

+0

Gott verdammt ... ja .. entfernen Sie die '&' – Lamda

Antwort

1

Jedes Mal, wenn Sie den Fensterinhalt drucken, müssen Sie sich das Fenster iterieren. Dies kann etwa so, indem Sie den Inhalt Ihrer for Schleife erfolgen:

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; 
} 

Beachten Sie, dass die Breite des Fensters (NUM_SECONDS*SAMPLE_RATE) ist. Dies könnte in einer Variablen wie window_width oder ähnlich gespeichert werden, um die Lesbarkeit zu verbessern.

+0

was ist '(it + (NUM_SECONDS * SAMPLE_RATE))' genau .. wenn es um Lesbarkeit geht ..? – Lamda

+0

Es zeigt auf (eine Vergangenheit) das Ende des gleitenden Fensters der Breite 'window_width = (NUM_SECONDS * SAMPLE_RATE)'. Um also in der inneren Schleife über das Fenster zu iterieren, muss der Fensteriterator 'wit' an der aktuellen Position von it beginnen und bei it + window_width stoppen. – scrpy

0

Es ist nicht klar, welches Fenster Objekt hält. In der folgenden Anweisung geben Sie jedoch die Adresse des Fensters an. Daher wird die Adresse anstelle des Werts gedruckt.

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

Versuchen mit folgenden Aussage: -

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

zu verwechseln, aber es ist nur einen Wert drucken ... – Lamda

+0

Können Sie die gesamte Ausgabe zur Verfügung stellen? Läuft Ihre for-Schleife mehr als eins, aber immer wieder den gleichen Wert? –

Verwandte Themen