Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Vector vor- und rückwärts durchlaufen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
04.05.2010, 21:08 Uhr
barca2009



Hallo,

unten seht ihr mein Programmgerüst. Ich möchte ein Vector mit Inhalt befüllen und den Inhalt vorwärts und rückwärts ausgeben.
Dazu habe ich eine Methode vectorInput(), in der ich die Zahlen von 1-6 in mein Vector speichere.
Die Methode saveVectorInput(int zahl) nimmt über sein Parameter die Werte von 1-6 und speichert diese in den Vector.

Nun ist die Frage wie ich den Inhalt des Vector vor- und rückwärts ausgeben kann.
Mein Vector ist nach der Ausführung der Methode vectorInput() mit den Zahlen von 1-6 gefüllt.

Nun erfolgt eine Demonstration, wie ich mir das vorstelle:
Wenn ich nun die Taste f drücke, dann gehe in dem Vector die Werte vorwärts (FW) und gebe sie aus. Analg mit b rückwärts (BW).
Taste f wird gedrückt: Ausgabe 1
Taste f wird gedrückt: Ausgabe 2
Taste f wird gedrückt: Ausgabe 3
Taste b wird gedrückt: Ausgabe 2
Taste f wird gedrückt: Ausgabe 3
Taste f wird gedrückt: Ausgabe 4
Taste f wird gedrückt: Ausgabe 5
Taste b wird gedrückt: Ausgabe 4
Taste b wird gedrückt: Ausgabe 3
usw.

Ist es sinnvoll zwei Methoden dafür zu erstellen (vectorFW() und vectorBW() ) um je nach Tastendruck zwischen den Methoden zu springen? Wenn ja, wie übergebe ich den Inhalt des Vectors aus der Methode saveVectorInput(int zahl) in die jeweilige vectorFW/BW()-Methode?

Könnte ich das Vorgehen auch nur in der Methode saveVectorInput(int zahl) durchführen? Wenn ja, wie kann ich dann da die Fallunterscheidung bzgl. der gedrückten Taste machen?


Vielen Dank

Hier ist die header:

C++:
#include<vector>
#include<string>
#include<iostream>
using namespace std;

class VectorDurchlaufen
{
public:
    int zahl;
    VectorDurchlaufen();
    ~VectorDurchlaufen();
      
    std::vector<int> vecDurchlaufen;
    std::vector<int>::iterator itDurchlaufen;
    std::vector<int>::reverse_iterator revDurchlaufen;

    void vectorFW();
    void vectorBW();
    void saveVectorInput(int zahl);
    void vectorInput();
};



Hier ist die CPP:

C++:
#include "VectorDurchlaufen.h"

VectorDurchlaufen::VectorDurchlaufen()
{
    vectorInput();
}

VectorDurchlaufen::~VectorDurchlaufen()
{
}

void VectorDurchlaufen::vectorInput()
{
    saveVectorInput(1);
    saveVectorInput(2);
    saveVectorInput(3);
    saveVectorInput(4);
    saveVectorInput(5);
    saveVectorInput(6);
}

void VectorDurchlaufen::saveVectorInput(int zahl)
{
    vecDurchlaufen.push_back(zahl);    
}

void VectorDurchlaufen::vectorFW()
{
    cout << "Inhalt des Vectors vorwärts ausgeben " << std::endl;
}

void VectorDurchlaufen::vectorBW()
{
    cout << "Inhalt des Vectors rückwärts ausgeben " << std::endl;
}




Hier ist die main


C++:
#include "VectorDurchlaufen.h"
#include<string>

int main()
{
    VectorDurchlaufen *pVecDurchlaufen = new VectorDurchlaufen();
    
    std::string key;
    cin >> key;

    if (key == "f")
        pVecDurchlaufen->vectorFW();
    if (key == "b")
        pVecDurchlaufen->vectorBW();
    else
        cout << "Falsche Taste wurde gedrückt!" << std::endl;
    return 0;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.05.2010, 11:26 Uhr
MaBa



Hallo barca2009,

zunächst eine paar kleine Anmerkungen zur main:

Die Ausgabe "Falsche Taste wurde gedrückt!" sollte bei jedem Tastendruck von "f" erscheinen, auch wenn das vermutlich nicht gewollt ist. Zur Lösung kannst du einfach

Code:
else if (key == "b")
verwenden.

Außerdem kannst du dein Programm so ja nicht wirklich testen, da nur eine einzelne Eingabe verlangt wird. Daher schlage ich eine Schleife vor.

Da es sich bei key ja um ein einzelnes Zeichen handelt, würde ich als Datentyp statt string eher char verwenden. Dann kannst du (der Übersichtlichkeit halber) auch ein switch-statement verwenden:


C++:

    char key;
    
    while(key != 'q')
    {
        cin >> key;

        switch(key)
        {
            case 'f': pVecDurchlaufen->vectorFW(); break;
            case 'b': pVecDurchlaufen->vectorBW(); break;
            default: cout << "Falsche Taste wurde gedrückt!" << std::endl;
        }
            
    }




So, jetzt zur Frage:
Die Problembeschreibung ist etwas zweideutig, daher weiß ich nicht, ob du jeweils nur ein Zeichen ausgeben willst oder alle Elemente des Vectors in der jeweiligen Reihenfolge. Aufgrund des Beispiels gehe ich jetzt mal davon aus, dass nur ein Element ausgegeben werden soll. Zur Umsetzung kannst du eine zusätzliche Variable "index" einführen und in den zwei Methoden dann über den Index auf den Vector zugreifen:


C++:

void VectorDurchlaufen::vectorBW()
{
    if(index >= 1)
        cout << "BW: " << vecDurchlaufen.at(--index) << std::endl;
    else
        std::cout << "Erstes Element bereits erreicht\n";
}

void VectorDurchlaufen::vectorFW()
{
    if(index <= 4)
        cout << "FW: " << vecDurchlaufen.at(++index) << std::endl;
    else
        std::cout << "Letztes Element bereits erreicht\n";
}



Allerdings ist das nicht wirklich schön und sehr viel unnötiger Code. Du kannst auch gleich im switch-Statement auf den Vector zugreifen und das Element ausgeben oder dir eine Methode schreiben, die abhängig von der Eingabe den Zugriff auf den Vector regelt. Dabei musst du (wie oben) darauf achten, dass du nicht über die Grenzen des Vectors hinaus auf (nicht vorhandene) Elemente zugreifst.

Mit freundlichen Grüßen,
MaBa
--
Dipl.-Inform. Markus Barth
Wissenschaftlicher Mitarbeiter

Fachhochschule Trier
Umwelt-Campus Birkenfeld

Dieser Post wurde am 05.05.2010 um 11:27 Uhr von MaBa editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.05.2010, 08:11 Uhr
~f.-th.
Gast


Brauchst du die folgenden Zeile direkt in deiner Header-Datei?

C++:
#include<vector>
#include<string>
#include<iostream>
using namespace std;



In grösseren Projekten kann so was Ärger bereiten, vor allem die untere Zeile mit dem "using ..."

Das sollte nur in der Datei stehen wo es auch gebraucht wird.

MfG f.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: