2017-03-03 7 views
0

なぜpush_backが意図したとおりに動作しないのですか?それはベクトルpush_backが機能しないC++

using namespace std; 
void addItem(vector<string>& STRING, string item) 
{ 
    STRING.push_back(item); 
} 

int main() 
{ 
    string item; 
    vector<string> STRING(100); 
    ifstream myFile; 
    myFile.open("food.txt"); 

    if (myFile.is_open()) //code where I store my data into the array 
    { 
     int i = 0; 
     while (!myFile.eof()) 
     { 
      getline(myFile, STRING[i]); 
      i++; 
     } 
    } 
    myFile.close(); 

    cin >> item; 
    addItem(STRING, item); 
    int x = 0; 
    while(!STRING[x].empty()) //code to print the current array 
    { 
     cout << STRING[x]; 
     printf("\n"); 
     x++; 
     return 0; 
    } 
} 

以下の私の現在のコードでは動作しない理由としてはかなり混乱し、私は私の配列を初期化する方法に何か問題はありますか? CodeBlocksを使用したときにはエラーが0回、警告が0回だったので、実行するまでは正常だったと想定していました。

+6

問題を再現できるものを提供してください。 –

+1

あなたの 'printList'があなたが最小限のコードで示した' while'ループであれば、それは単なる間違っています。また、ベクトルの長さが変更されたかどうかを実際に確認することはありません。 – UnholySheep

+0

番号100がどこにでもハードコードされないように、コードをリファクタリングします。 'STRING'を空に初期化し、' push_back'を使用して先頭から追加します。 'STRING'はマクロのように見えるので、変数の名前を' strings'に変更してください。ループ状態では 'eof'を使用しないでください。そして、最後に 'using namespace std;'を避けてください。ああ、 'printf'の代わりに' std :: cout'を考えてみましょう。 –

答えて

2

コードは機能します。しかし、作成中にベクトルの初期サイズを指定しました。あなたのベクトルは100要素の初期サイズで始まります。そう言えば、実際に配列に新しい要素を追加していますが、push_back()はすでに存在する配列の直後に100番目の位置に配置しています。

void printList(vector<string> &STRING) 
{ 
    cout << "size: " << STRING.size() << endl; 
    for (int i = 0; i < STRING.size(); i++) 
     cout << i << ":" << STRING[i] << ", "; 
    cout << endl; 
} 

あなたは

vector<string> STRING; 

またdefaulコンストラクタを使用してそれを避けることができ、私はここに私がprintlist機能を貼り付けます、あなたが表示されますその問題はである何@編集:固定構文エラー(ベクトルではなくベクトル)。クリスチャンハックルを指摘してくれてありがとう!

+0

あなたのprintList関数がうまくいきました。問題が発生しました。 –

+0

答えに「vector」ではなく「Vector」と書かれています。そして 'std :: endl'の代わりに' '\ n''を使うべきです。 –

+0

@ChristianHacklタイプミスを修正しました。指摘してくれてありがとう! std :: endlの代わりに '\ n'をもう少し詳しく説明できますか?私が知っているすべての違いは、すべての使用法(ergo、過度に使用されると性能低下)で出力をフラッシュするstd :: endlについてです。 – Kosmo

関連する問題