[C++] Zadania z kolokwium - pytanie

0

Niedługo mam egzamin z C++, przeglądam sobie właśnie poszczególne kolokwia i szukam odpowiedź na niektóre pytania.

1.Posłuż się biblioteką "stack" do zdefiniowania pewnego stosu liczb naturalnych. Korzystając z iteratora wyprowadź wszystkie elementy stosu na standardowe wyjście (przyjmij, że stos został wcześniej utworzony bez twojego udziału).

Szukam w Internecie na ten temat, ale stos nigdzie nie był implementowany z iteratorem.

  1. Dla poniższej klasy Example:
class Example
{
   private:
      int n;
      char z;
   public:
      Example(int aa, char bb) : n(aa)
      {  
          z = bb;
       }
};

utwórz dwa następujące obiekty:
-obiekt a1 na stercie
-obiekt a2 na stosie

Na stercie będzie to wyglądać np. tak: Example *a1 = new Example(5,"a");

A na stosie?

Na razie to tyle. Jakbym jeszcze coś znalazł czego nie wiem to dopisze się tutaj.

0

@Macron, twój przykład wygląda praktycznie tak samo, jak mój na stercie.

0

Bo w C++ różnica jest taka że jeśli coś ma być na stercie to używasz new, a jeśli nie to nie.
Ad1. masz użyć <stack> z stl'a a nie napisać własny stos.

stack<int> stosik;
stack<int>::iterator iteratorDoStosu;
for(iteratorDoStosu=stosik.begin(); iteratorDoStosu != stosik.end(); iteratorDoStosu++)
  cout<<*iteratorDoStosu;
0

Co do ad1, to w sumie robiłem tak jak ty, ale nie chce mi tego skompilować. Inne, np. <list> kompiluje bez problemu.

Mam takie errory:

 
c:\documents and settings\administrator\moje dokumenty\visual studio 2010\projects\stack\stack\stack.cpp(12): error C2039: 'iterator' : is not a member of 'std::stack<_Ty>'
          with
          [
              _Ty=int
          ]
c:\documents and settings\administrator\moje dokumenty\visual studio 2010\projects\stack\stack\stack.cpp(12): error C2133: 'iteratorDoStosu' : unknown size
c:\documents and settings\administrator\moje dokumenty\visual studio 2010\projects\stack\stack\stack.cpp(12): error C2512: 'std::iterator' : no appropriate default constructor available
c:\documents and settings\administrator\moje dokumenty\visual studio 2010\projects\stack\stack\stack.cpp(13): error C2039: 'begin' : is not a member of 'std::stack<_Ty>'
1

std::stack nie ma iteratorów.

0

No to teraz jest pytanie, czy <stack> z biblioteki stl można obsłużyć za pomocą iteratora? Bo w sumie nie znalazłem żadnego przykładu ze stosem wykonanym w ten sposób.

Mam jeszcze pytanie odnośnie takiego przykładu:
Przeciąż w dowolny sposób operator multiplikacji * za pomocą funkcji zaprzyjaźnionej z klasą KLASA. Podaj pełną definicję tego operatora.

class KLASA
{
   private:
     int a, b;
   public:
   KLASA (int pl) : a(pl) 
   {p2 = 0;}

    friend ......

Nie wiem za bardzo jak zrobić te przeciążenia operatorów. W Internecie szukałem jakiś dobry przykładów, ale wszystko dla jest jakieś zawiłe.

Ja zrobił bym to tak: friend KLASA& operator + (Klasa kl) , a jak powinno być?

0

stack nie posiada iteratorów, jego zawartosc wypisujesz tak (zawartość jednocześnie się kasuje - jak chcesz wypisywać to musisz użyć innego kontenera np.: deque):

while(!stos.empty()) {
    cout << stos.top();
    stos.pop();
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1