2017-11-02 4 views
-1

私はベクトル10を初期化し、要素を1つだけ挿入し、挿入されていない要素の数をチェックしたいと思います。ベクトルの空要素をチェックする方法

#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(); 
} 

私のカウント機能が0の空のスペースがあることを示しているが、それは9でなければならないし、私もこのif(myVector[i] == nullptr)ような何かをチェックしようとすると、それはコンパイルされませんでした:私は現在、このようなものを持っています。私はここで間違って何をしていますか?

+0

は、私がチェックしてみました 'のstd ::ベクトル :: capacity' – Fureeish

+0

@Fureeishを見てみましょう。それはdispalys(ベクトルの大きさである) –

答えて

1

あなたcount()関数は、ベクトルであなたの要素のどれもスペース' 'しないため0がある返す理由。これが機能するためにあなたがそれを構築する際に、スペースを使用してベクトルを埋める:

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

} 

は、そうでなければ、それは '\0'の挿入にデフォルト設定されます。もう1つの方法は count()== ' 'のチェックを == '\0'に置き換えることです。ちなみに、あなたの addElement()関数は同じ問題を抱えています。

+0

ありがとうございました。私は 'myVector(Vectorsize、 '')' –

+0

について知りませんでした。「myVector(Vectorsize、 '')」が私が探しているものでした。再度、感謝します。それはチャンピオンのように動作します –

+0

助けになるのはうれしいです。 :) – cantordust

1

まず、vector<char>という要素のデフォルト値は、ではなく、'\0'となります。 (また、あなたは常にconstructor of vector (2)の第二パラメータでそれを指定することができることに注意してください。)

第二に、==addElement()if(myVector[i]= ' ')ため=の代わりに使用する必要があります。

すなわち

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

''\ 0' 'を探しているときに' '''を探しているので、あなたの要素は_not_が追加されていません。 – cantordust

1

サイズが10のstd::vectorを初期化するときは、実際にはこれらの値を'\0'に初期化していますが、スペース文字で構成されていると仮定しています。

コンストラクタを変更して、最初にmyVector(VectorSize, ' ')に空白文字を入力することができます。しかし、私はあなたがベクトルを悪用していると思います。

ベクトルにある程度のスペースをあらかじめ割り当てたい場合は、代わりにreserve(10)を使用して、push_back()のアイテムを追加してください。その後、myVector.size()はベクトル内の項目の数を表示します。

#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

本当ですか?私がコンピュータに戻ったときに答えを更新します。どうも。 – Mitch

関連する問題