Benutzer-Werkzeuge

Webseiten-Werkzeuge


edv:prg:cpp:crashkurs:part_02_klassen_2c

C++ Crashkurs / Übung 4

Lösung mit "list" (doppelt verkettete Liste). Iteratoren.

Ueb2c.h:

// File : Ueb2c.h
//
 
#include "..\stdafx.h"
 
#include "Ueb2c.VerketteteListe.h"
 
using namespace Ueb2c;
 
#include <list>
 
int _ueb (int argc, _TCHAR* argv[])
{
	// Lösung mit list (doppelt verkettete Liste):
	std::list<int> v;
	v.push_back(4711); // push_back() - Element am Ende der Kette anhängen
	v.push_back(815);
	v.push_back(42);
 
	std::cout << "Liste mit vector:" << std::endl;
	for (auto iter1 = v.begin(); iter1 != v.end(); iter1++)
	{
		std::cout << "    " << *iter1 << std::endl;
	}
 
	CListe* pListe = new CListe();
	pListe->ElementAnhaengen(4711);
	pListe->ElementAnhaengen(815);
	pListe->ElementAnhaengen(42);
 
	std::cout << "Liste iteriert mit prefix-operator:" << std::endl;
	for (auto iter2 = pListe->begin(); iter2 != pListe->end(); ++iter2)
	{
		std::cout << "    " << *iter2 << std::endl;
	}
	std::cout << "Liste iteriert mit postfix-operator:" << std::endl;
	for (auto iter3 = pListe->begin(); iter3 != pListe->end(); iter3++)
	{
		std::cout << *iter3 << std::endl;
	}
 
	delete pListe;
 
	return 0;
}
 
// EOF

Ueb2c.VerketteteListe.h:

// File : Ueb2c.VerketteteListe.h
//
 
namespace Ueb2c
{
	class CListe; // Vorabdeklaration
 
	class CListenElement
	{
	friend CListe;
 
	private:
		int		nInhalt;
		CListenElement*	pNaechster;
 
	public:
		CListenElement (int newInhalt)
		{
			nInhalt = newInhalt;
			pNaechster = nullptr;
		}
 
		~CListenElement ()
		{
			delete pNaechster;
			pNaechster = nullptr;
		}
 
		int GetInhalt ()
		{
			return nInhalt;
		}
 
		CListenElement* GetNaechster ()
		{
			return pNaechster;
		}
	};
 
	class CListeIterator
	{
	private:
		CListenElement* element;
 
	public:
		CListeIterator (CListenElement* pElem)
		{
			element = pElem;
		}
 
		bool operator!=(CListeIterator another)
		{
			return (this->element != another.element);
		}
 
		CListeIterator& operator++()
		{
			element = element->GetNaechster();
 
			return *this;
		}
 
		int operator*()
		{
			return element->GetInhalt();
		}
	};
 
	class CListe
	{
	public:
//		struct LISTEN_ELEMENT	// Nicht mehr nötig
//		{
//			int		nInhalt;
//			LISTEN_ELEMENT*	pNaechster;
//		};
 
		CListenElement*	pStart;
 
		CListe ()
		{
			pStart = nullptr;
		}
 
		~CListe ()
		{
			delete pStart;
			pStart = nullptr;
		}
 
		CListeIterator begin ()
		{
			return CListeIterator(pStart);
		}
 
		CListeIterator end () // Soll die Position "hinter" dem letzten Elemen liefern
		{
//			CListenElement* pLetztes = pStart;	// Nicht mehr nötig
//			while (pLetztes->GetNaechster() != nullptr) pLetztes = pLetztes->GetNaechster();
 
//			return CListeIterator(pLetztes->GetNaechster());
			return CListeIterator(nullptr); // Am Ende der Kette liefert GetNaechster() immer nullptr zurück
		}
 
		void ElementAnhaengen (int nInhalt)
		{
			auto pNeu = new CListenElement(nInhalt);
 
			if (pStart == nullptr)
			{
				pStart = pNeu;
			}
			else
			{
				CListenElement* pLetztes = pStart;
				while (pLetztes->GetNaechster() != nullptr) pLetztes = pLetztes->GetNaechster();
				pLetztes->pNaechster = pNeu;
			}
		}
 
	private:
//		void ElementFreigeben (LISTEN_ELEMENT* pElement) // Nicht mehr nötig - das übernimmt der Destructor
//		{
//			if (pElement->pNaechster != NULL) ElementFreigeben(pElement->pNaechster);
//			free(pElement);
//			pElement = NULL;
//		}
	};
 
}
 
// EOF

Programm.cpp: - Der Einstiegspunkt

// Programm.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
 
#include "Ueb2c.h"
 
int _tmain (int argc, _TCHAR* argv[])
{
	return _ueb(argc, argv);
}
 
// EOF

stdafx.h:

// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
 
#pragma once
 
#include "targetver.h"
 
#include <stdio.h>
#include <tchar.h>
 
// TODO: reference additional headers your program requires here
 
#include <malloc.h>
#include <iostream>
 
// EOF

targetver.h:

// Including SDKDDKVer.h defines the highest available Windows platform.
 
// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
 
#pragma once
 
#include <SDKDDKVer.h>

Stand: 19.09.2014 — : Jürgen Kreick

EOF

edv/prg/cpp/crashkurs/part_02_klassen_2c.txt · Zuletzt geändert: 2020/01/11 01:23 von 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki