cin.getline und vector



  • Hallo, kann man einen Vector auch mit cin.getline verwenden ?

    So ging es nicht:

    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    
    vector<char> var_vec(200);
    cin.getline(var_vec , 200);
    
    system("PAUSE");
    }
    

    [C++ Fehler] Unit1.cpp(9): E2285 Keine Übereinstimmung für 'istream::getline(vector<char,allocator<char> >,int)' gefunden

    So funktioniert es aber da verwende ich ja wieder ein normales Array.
    Geht das auch alles nur mit vector oder komme ich um das Array nicht herum ?

    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    char var[200];
    vector<char> var_vec(0);
    cin.getline(var , 200);
    
            for (int i=0; i<= strlen(var) ; i++)
            {
                    var_vec.push_back( var[i] );
    
            }
    
            for (int i=0; i<= strlen(var) ; i++)
            {
                   cout<<var_vec[i];
            }
    system("PAUSE");
    }
    

  • Mod

    &var_vec[0] ist ein Zeiger auf das erste Element.

    Was mich aber stutzig macht: Ein vector<char>? Dir ist aber schon der std::string bekannt?



  • Ja std::string kenne ich.
    Aber ich wollte wissen ob es mit dem Vector auch funktioniert.

    Aber mit cin.getline kann ich ja anscheind die Daten nur in das erste Element vom Vector packen.

    cin.getline scheint also recht sinnlos zu sein wenn man einen Vector verwendet.
    Oder sehe ich das falsch?


  • Mod

    Wie kommst du jetzt da drauf? Im vector ist dir garantiert, dass alle Daten hintereinander im Speicher liegen, layoutkompatibel zu einem Array. Falls du dich mal näher mit Arrays beschäftigst wirst du feststellen, dass ein Array, welches an eine Funktion übergeben wird, dort auch nur als Pointer auf das erste Element ankommt.



  • Oops ich hatte gerade einen dummen Fehler in meinem Quelltext.

    Jetzt funktioniert es:

    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    
    vector<char> var_vec(200);
    
    cin.getline( &var_vec[0] , 200);
    
            for ( int i=0 ; i<strlen(&var_vec[0]) ; i++)
            {
                    cout<<var_vec[i];
            }
    
    system("PAUSE");
    }
    

    Vector funktioniert mit cin.getline doch so wie ich will. 😃

    thx



  • Da dein char kein Zeiger auf char, sondern eben ein normaler char ist, wirst du in dem Fall immer nur einen Buchstaben pro Vektorelement haben, was die Schleife überflüssig macht.



  • #include <string>
    
    int main()
    {
      std::string s;
      std::getline(std::cin, s);
      std::cout << s;
    }
    

Anmelden zum Antworten