2016-07-13 4 views
-3
gefüllt

Ich habe eine vector<int> count die ich push_back ganzen Zahlen, es wie folgt gefüllt:Spezifische Zählung einmal Vektor wird mit Null int und positiven int

0,0,0,0,0,0,0, 1,2,3,4,5, 0,0,0,0,0,0,0,0, 6,7,8, 0,0,0,0, 9,10, 0 , 0,0

Ich möchte diesen Vektor durchlaufen und es sollte geben int counts = 3, grundsätzlich zählen, wie viele positive ganze Zahlen gibt es zwischen den Nullen und zählen Sie es als 1 pro Gruppe.

Ich habe versucht, den ganzen Tag durch alle Elemente zu schlängeln und verschiedene Ansätze zu versuchen, aber jetzt gebe ich auf, deshalb würde Hilfe geschätzt werden!

vector

+1

Können Sie zeigen, was Sie bisher versucht haben? – Slava

+1

Verwenden Sie ein Flag und setzen Sie es auf false. Gehe den Vektor Element für Element durch. Sobald Sie eine Nicht-0 gefunden haben und das Flag falsch ist, setzen Sie das Flag auf Wahr und inkrementieren Sie einen Zähler. Sobald Sie eine Null gesetzt haben, setzen Sie das Flag auf false zurück. mach weiter, bis du eine andere nicht 0 findest und mache denselben Prozess. – NathanOliver

+0

[std :: barriered_find] (http://en.cppreference.com/w/cpp/algorithm/adjacent_find) kann zum Auffinden von Gruppenrahmen verwendet werden. –

Antwort

1

Sie haben durch die Elemente in dem Vektor in einer Schleife und die Gruppe zählen, wenn der vorherige Wert Null als unten.

#include <iostream> 
#include <vector> 

using namespace std; 

int countGroups(vector<int> intVec) 
{ 
    int count = 0; 
    int vec_size = intVec.size(); 

    bool lastelemzero = true; 

    for(int i = 0; i < vec_size; i++) 
    { 
     if((intVec[i]) && (lastelemzero)) 
     { 
      count++; 
      lastelemzero = false; 
     } 

     if(intVec[i] == 0) 
      lastelemzero = true; 
    } 

    return count; 
} 

int main() 
{ 
    vector<int> count; 

    count.push_back(0); 
    count.push_back(0); 
    count.push_back(1); 
    count.push_back(2); 
    count.push_back(3); 
    count.push_back(0); 
    count.push_back(0); 
    count.push_back(0); 
    count.push_back(10); 
    count.push_back(20); 
    count.push_back(0); 
    count.push_back(0); 
    count.push_back(1); 
    count.push_back(2); 
    count.push_back(3); 
    count.push_back(0); 
    count.push_back(0); 

    cout << "number of groups : " << countGroups(count) << endl; 
} 
+0

Vielen vielen DANKE! Ich wünschte, ich könnte dir ein Bier kaufen :) – HumbleMan

+0

Danke HumbleMan :) – kadina