2017-06-11 19 views
0
vector<char>teikums(count); 

ベクトルから要素を消去しようとすると問題が発生します。例については 私は入力:C++消去ベクトル要素

a b c d e f 

と要素

teikums.erase(teikums.begin() + 3); 

を消去しようとしたとき、出力

a b d e e f 

はそれが出力

しない理由を把握しようとしてきます
a b c d f 

コード:あなたは要素を消去すると

int main() { 
    system("cls"); // Notira Ekranu 

    patsk = 0; // Pieskir vertibu 
    cout << "Ievadi Massiva lielumu: "; 
    cin >> count; 
    vector<char>teikums(count); 
    cout << "Vai aizpildit burtus automatiski (Y/Cits): "; 
    cin >> aizp; 
    srand(time(NULL)); 
    cout << "\n"; 
    if (aizp == 'y' || aizp == 'Y') { 
     for (int i = 1; i <= count; i++) { 
      teikums[i] = (rand() % 26) + 'a'; 

      cout << teikums[i] << " "; 
     } 
    } 
    else { 

     do { 
      cout << "Ievadi " << count << " burtus vienu pa vienam\n"; 
      for (i = 1; i <= count; i++) { 
       cin >> teikums[i]; 
       if (!((teikums[i] >= 'a' && teikums[i] <= 'z') || (teikums[i] >= 
        'A' && teikums[i] <= 'Z'))) { 

        cout << "Kluda! Ievadiet tikai burtus\n"; 
        i = i - 1; 

       } 
      } 
     } 
     while (i <= count); 
    } 
     teikums.erase(teikums.begin() + 3); 
    do { 
     cout << "\n"; 
     cout << "\n1.Izpildit individualo uzdevumu"; 
     cout << "\n2.Pievienot jaunu elementu vektoram"; 
     cout << "\n3.Dzest elementu no vektroa"; 
     cout << "\n4.Sakt programmu no jauna"; 
     cout << "\n5.Beigt Darbu"; 
     cout << "\nIevadi izveli : "; 
     cin >> opcijas; 
     switch (opcijas) { 
     case 1: 
      izpildit_uzdevumu(teikums); 
      break; 
     case 2: 
      pievienot_elementu(teikums, count); 
      break; 
     case 3: 
      dzest_elementu(teikums); 
      break; 
     case 4: 
      no_jauna(); 
      break; 
     case 5: 
      return 0; 
     } 
    } 
    while (opcijas != 4); 
    getch(); 

} 

void izpildit_uzdevumu(vector<char>& teikums) { 
    patskani = 0; 
    for (i = 0; i <= count; i++) { 
     cout << " " << teikums[i]; 
    } 

    cout << "\nIzmantotie Patskani:"; 
    for (i = 1; i < count; i = i + 2) { 
     if (teikums[i] == 'a' || teikums[i] == 'e' || teikums[i] == 'i' || 
      teikums[i] == 'o' || teikums[i] == 'u' || teikums[i] == 'A' || 
      teikums[i] == 'E' || teikums[i] == 'I' || teikums[i] == 'O' || 
      teikums[i] == 'U') { 
      patskani = patskani + 1; 

      cout << teikums[i]; 

     } 

    } 
    cout << "\nPatskanu Skaits: " << patskani; 

} 
+0

あなたはそれを再現するコード全体を投稿できますか? – Galik

+1

[erase-remove idiom](https://en.wikipedia.org/wiki/Erase%E2%80%93remove_idiom)を参照してください。 –

+1

[いいえrepro](http://coliru.stacked-crooked.com/a/71e44c7f8944e31d) –

答えて

0

、あなたもcountを減らす、またはあなたのベクトルの大きさを監視するためにteikums.size()を使用する必要があります。あなたは6つの要素を持っていた

、あなたがやった:今、ベクトルの数が5つの要素を持っているので、4番目の要素を消去

teikums.erase(teikums.begin() + 3); 

を。

refのexampleも確認してください。

関連する問題