effacer () après avoir effectué remove_if ()

J'ai créé une fonction à exécuter par l'intermédiaire d'un vecteur de chaînes et de supprimer toutes les chaînes de longueur 3 ou moins. C'est une leçon dans l'utilisation de la STL Algorithme de la bibliothèque.

Je vais avoir des problèmes en ce que les fonctions de travail, mais pas seulement de supprimer des chaînes de longueur 3 ou moins, mais il ajoute également la chaîne "vecteur" à la fin.

La sortie doit être

This test vector

et c'est plutôt

This test vector vector"

Comment puis-je résoudre ce problème?

/*
* using remove_if and custom call back function, write RemoveShortWords 
* that accepts a vector<string> and removes all strings of length 3 or
* less from it. *shoot for 2 lines of code in functions.
*/

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <iterator>
using namespace std;

bool StringLengthTest(string test) //test condition for remove_if algo.  
{
    return test.length() <= 3;
}

void RemoveShortWords(vector<string> &myVector)
{
    //erase anything in vector with length <= 3
    myVector.erase(remove_if(myVector.begin(),
                             myVector.end(),
                             StringLengthTest));
}

int main ()
{
    //add some strings to vector
    vector<string> myVector;
    myVector.push_back("This");
    myVector.push_back("is");
    myVector.push_back("a");
    myVector.push_back("test");
    myVector.push_back("vector");

    //print out contents of myVector (debugging)
    copy(myVector.begin(), myVector.end(), ostream_iterator<string>(cout," "));
    cout << endl; //flush the stream

    RemoveShortWords(myVector); //remove words with length <= 3

    //print out myVector (debugging)
    copy(myVector.begin(), myVector.end(), ostream_iterator<string>(cout," "));
    cout << endl;

    system("pause");
    return 0;
}

source d'informationauteur MCP