2017-11-02 3 views
-1

Ich initialisiert ein vecotor der Größe 10 und ich füge nur 1 Element und ich möchte überprüfen, wie viele nicht eingefügt werden. Im Moment habe ich so etwas wie diese:Wie überprüft man leere Elemente in Vektor

#include <vector> 
#include <iostream> 

using std::vector; 
using std::cout; 
using std::endl; 

class VectorCheck 
{ 

private: 

    vector<char> myVector; 
    int size; 
    int PosOfLastElement = 0; 

public: 

VectorCheck(int Vectorsize): 
size(Vectorsize), myVector(Vectorsize) 
{ 

} 


int count() 
{ 
    int numOfElements = 0; 

    for(int i=0; i<myVector.size();i++) 
    { 
     if(myVector[i] == ' ') 
     { 
      numOfElements ++; 
     } 
    } 

    cout << numOfElements << endl; 

} 

void addElement(char element) 
{ 
    for(int i=PosOfLastElement; i<myVector.size();i++) 
    { 
     if(myVector[i]= ' ') 
     { 
      myVector[i] = element; 
      PosOfLastElement = i; 
      break; 
     } 
    } 
} 



}; 

int main() 
{ 
    VectorCheck vectorTest(10); 
    vectorTest.addElement('a'); 
    vectorTest.count(); 
} 

meine Zählung Funktion zeigt, dass es 0 leere Räume, aber es solle 9. sein, und ich will auch so etwas wie diese if(myVector[i] == nullptr) zu überprüfen, und es hat nicht kompilieren. Was mache ich hier falsch?

+0

Werfen Sie einen Blick auf 'std :: vector :: capacity' – Fureeish

+0

@Fureeish ich geprüft und ausprobiert. Es gibt 10 (das ist die Größe des Vektors) –

Antwort

1

Der Grund, warum Ihre count() Funktion gibt 0 ist, weil keiner Ihrer Elemente in dem Vektor sind Räume ' '. Damit dies funktioniert, Ihre Vektor mit Leerzeichen füllen, wenn Sie es konstruieren:

VectorCheck(int Vectorsize): 
size(Vectorsize), myVector(Vectorsize, ' ') // <-- Add ' ' here to fill the vector 
{ 

} 

Ansonsten kann das Einfügen '\0' s Standard. Die andere Möglichkeit besteht darin, Ihren Scheck in count() durch == '\0' zu ersetzen. Übrigens, Ihre addElement() Funktion leidet unter dem gleichen Problem.

+0

Vielen Dank für die Antwort. Ich wusste nicht über 'myVector (Vectorsize, '')' –

+0

Es stellte sich heraus, dass der 'myVector (Vectorsize, '')' ist, was ich suche. Danke noch einmal. Es funktioniert wie ein Champion –

+0

Ich bin froh, Ihnen helfen zu können. :) – cantordust

1

Erstens wäre der Standardwert von Elementen vector<char>'\0', nicht ' '. (Beachten Sie auch, dass Sie immer es durch den zweiten Parameter der constructor of vector (2) angeben.)

Zweitens soll == statt = für if(myVector[i]= ' ') in addElement() verwendet werden.

heißt

int count() 
{ 
    int numOfElements = 0; 

    for (int i=0; i<myVector.size(); i++) 
    { 
     if (myVector[i] == '\0') 
     { 
      numOfElements ++; 
     } 
    } 

    cout << numOfElements << endl; 
    return numOfElements; 
} 

void addElement(char element) 
{ 
    for(int i=PosOfLastElement; i<myVector.size(); i++) 
    { 
     if (myVector[i] == '\0') 
     { 
      myVector[i] = element; 
      PosOfLastElement = i; 
      break; 
     } 
    } 
} 

LIVE

+0

Ihr Element ist _not_ hinzugefügt werden, weil Sie nach '' '' suchen, wenn Sie nach ''\ 0'' suchen sollten. – cantordust

1

Wenn Sie Ihre std::vector mit einer Größe von 10 initialisieren, initialisieren Sie diese Werte tatsächlich auf '\0', aber Sie gehen davon aus, dass sie mit dem Leerzeichen erstellt werden.

Sie könnten Ihren Konstruktor so ändern, dass myVector(VectorSize, ' ') anfänglich Leerzeichen enthält. Aber ich denke du missbrauchst Vektor.

Wenn Sie eine bestimmte Menge an Speicherplatz im Vektor reservieren möchten, verwenden Sie stattdessen reserve(10) und fügen Sie dann einfach Elemente mit push_back() hinzu. Dann zeigt myVector.size() die Anzahl der Elemente im Vektor an.

#include <vector> 
#include <iostream> 

using namespace std; 

class VectorCheck 
{ 
private: 
    vector<char> myVector; 

public: 
    VectorCheck(int initialCapacity) 
    { 
     myVector.reserve(initialCapacity); 
    } 

    size_t count() 
    { 
     return myVector.size(); 
    } 

    void addElement(char element) 
    { 
     myVector.push_back(element); 
    } 
}; 

int main() 
{ 
    VectorCheck vectorTest(10); 
    vectorTest.addElement('a'); 
    cout << vectorTest.count() << endl; 
} 
+0

Wirklich? Ich werde die Antwort aktualisieren, wenn ich wieder an einem Computer bin. Danke. – Mitch

Verwandte Themen