Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[c++] Kontener set i vector

Ostatnio zmodyfikowano 2015-09-15 15:21
Autor Wiadomość
wojownik266
Temat założony przez niniejszego użytkownika
[c++] Kontener set i vector
» 2015-09-15 09:57:13
Chciałem sobie trochę poćwiczyć z kontenerami i napisałem taki program jak ten poniżej. Program wydawać by się mogło jest bardzo prosty. Problem w tym że nie dla mnie bo nie wiem jak wyświetlić zawartość zagnieżdżonego kontenera vektor w kontenerze set!? Czy ktoś mógłby mnie nakierować na rozwiązanie tego problemu? Chodzi o wyświetlenie zawartości wspomnianego kontenera. Prosiłbym też o informację na temat tego co jest źle napisane w tym programie i dlaczego? Podejrzewam że głównym podejrzanym będzie pętla for...!?    

C/C++
#include <iostream>
#include <vector>
#include <set>
using namespace std;

int main()
{
    set < vector < string > > call;
    set < vector < string > >::iterator pos;
    string line;
   
    cout << "Podaj tekst:";
    getline( cin, line );
    call.insert( call.begin(), call.end() );
   
    for( pos = call.begin(); pos != call.end(); ++pos )
         cout <<* pos << endl;
   
    cin.get();
    cin.get();
    return 0;
}
P-137523
Monika90
» 2015-09-15 10:00:23
Do wyświetlania użyj zagnieżdżonych pętli.

call.insert( call.begin(), call.end() );
Taka operacja nie ma sensu.
P-137524
wojownik266
Temat założony przez niniejszego użytkownika
» 2015-09-15 10:03:14
Czy mogłabyś nieco rozwinąć ten temat i powiedzieć dlaczego ta operacja nie ma sensu i jeżeli tak to jaką instrukcją można zastąpić ten kawałek kodu? Będzie to coś w rodzaju..!?
P-137525
Monika90
» 2015-09-15 10:09:56
Nie wiem czym zastąpić, bo nie wiem co chciałeś osiągnąć. To co napisałeś znaczy: do pustego kontenera wstaw jego własną zawartość - czyli nic.
P-137526
wojownik266
Temat założony przez niniejszego użytkownika
» 2015-09-15 10:13:32
Chciałbym po prostu dodać do tego kontenera jakiś tekst i po prostu wyświetlić zawartość. Czy taka konstrukcja ma sens?
C/C++
call.insert( line, line );

Wydaje mi się że ma trochę więcej sensu niż ta powyżej.
P-137527
Monika90
» 2015-09-15 10:43:41
Ale nie możesz wstawić do kontenera call stringa, ponieważ elementami tego kontenera są wektory. Możesz za to wstawić wektor stringów, co można zrobić tak:
C/C++
call.insert( { line } ); //dodanie wektora jednoelementowego

albo
C/C++
call.insert( { line, "xyz", "abc" } ); //dodanie wektora trójelementowego

A wyświetlić zawartość można np. w ten sposób:
C/C++
for( const auto & vec: call )
{
    for( const auto & str: vec )
         std::cout << str << ' ';
   
    std::cout << '\n';
}
P-137530
wojownik266
Temat założony przez niniejszego użytkownika
» 2015-09-15 15:21:33
Bardzo, bardzo Ci dziękuję za pomoc. Program po naniesieniu poprawek według Twoich sugestii działa tak jak sobie życzyłem i ma się tak:
C/C++
#include <iostream>
#include <vector>
#include <set>
using namespace std;

int main()
{
    set < vector < string > > call;
    vector < string > ball;
    string line;
    int ile = 0;
    cout << "Ile slow chcesz wprowadzic:";
    cin >> ile;
    for( int i = 0; i < ile; ++i ) {
        cin.get();
        cout << "Podaj slowo:";
        getline( cin, line );
        ball.push_back( line );
        call.insert( { line } );
       
    }
    for( const auto & vec: call )
    {
        for( const auto & str: vec )
             std::cout << str << ' ';
       
       
        std::cout << '\n';
    }
   
    cin.get();
    cin.get();
    return 0;
}
P-137533
« 1 »
  Strona 1 z 1