Non riesco bene ad usare getline (o almeno penso vada usato quello).

Stavo ripassando l'utilizzo delle stringhe e ho provato a risolvere un esercizio di Stroustup (5.11)
mi chiede in pratica di acquisire un tot di stringhe (e di fermare la procedura con Quit), poi farne un print unsorted ed uno sorted. Con il codice qui riportato va tutto bene tranne che se inserisco gli spazi le considera giustamente stringhe separate incontrando \0. Come posso fare?

codice:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>




int main(int argc, char* argv[]) {
    //variables
    int i=0;
    std::string Istring;
    std::vector<std::string> StringList;
    std::vector<std::string>::iterator iter, iterUnique;
    std::cout << "Insert some strings. Type 'Quit' to exit: \n\n";
    //read strings
    do{
        std::cout << "\t";
        std::cin >> Istring;
        StringList.push_back(Istring);
    }while(StringList.back() != "Quit");
    //Cancel Quit from vector    
    StringList.pop_back();
    //Print unsorted words
    std::cout << "\nUnsorted submitted words:\n";
    for(iter = StringList.begin();iter != StringList.end();iter++) {
        std::cout << "\t" << *iter << std::endl;
    }
    //Print sorted words
    std::cout << "\nSorted submitted words:\n";
    std::sort(StringList.begin(),StringList.end());
    iterUnique = std::unique(StringList.begin(),StringList.end());
    for(iter = StringList.begin();iter < iterUnique; iter++) {
        std::cout << "\t" << *iter << std::endl;
    }
    return 0;
}