Click here to load reader

arrays und vectors, Suchen und Sortieren - fbi.h-da.de · PDF file2006 Pearson Education, Inc. All rights reserved. 1 7 arrays und vectors, Suchen und Sortieren

  • View
    215

  • Download
    0

Embed Size (px)

Text of arrays und vectors, Suchen und Sortieren - fbi.h-da.de · PDF file2006 Pearson Education, Inc....

  • 2006 Pearson Education, Inc. All rights reserved.

    1

    77arrays und vectors,

    Suchen undSortieren

  • 2006 Pearson Education, Inc. All rights reserved.

    2

    7.1 Einfhrung7.2 Arrays 7.3 Deklaration von arrays 7.4 Beispiele zum Gebrauch von arrays 7.5 bergabe von arrays an Funktionen7.6 Fallstudie: Die Klasse GradeBook mit einem array7.7 Einfhrung in die C++ STL Klasse vector7.8 Suchen und Sortieren

    7.8.1 Lineare Suche7.8.2 Binre Suche7.8.3 Sortieren durch direktes Einfgen (Insertion-Sort)7.8.4 Merge-Sort (rekursive Implementierung)

    7.9 Mehrdimensionale arrays 7.10 Fallstudie: Die Klasse GradeBook mit einem zweidimensionalen

    array

  • 2006 Pearson Education, Inc. All rights reserved.

    3

    7.1 Einfhrung

    Array Datenstruktur, die zusammengehrige Datenelemente

    desselben Typs enthlt Datenstruktur der Sprache C++ (STL-Klasse') in zwei

    Varianten: array: Behlt immer die Gre, in der es vom Compiler

    whrend des bersetzungsvorgangs erzeugt wurde Weniger komfortabel zu nutzen, aber schneller und

    weniger Speicherverbrauch (normalerweise auf Stack) vector: Gre kann whrend der Programmausfhrung

    verndert werden Bei Bedarf automatisches Wachsen und Schrumpfen,

    aber langsamer und mehr Speicherverbrauch (auf Heap)

  • 2006 Pearson Education, Inc. All rights reserved.

    4

    7.1 Einfhrung

    Arrays in C++ und C Statt der in diesem Kapitel behandelten C++-Arrays (array

    und vector) kann in C++ auch das eingebaute (built-in) Array aus C verwendet werden.

    Diese C-Arrays sind unsicherer und weniger komfortabel zu nutzen.

    Wegen ihrer Bedeutung fr einige Anwendungsgebiete (s. z.B. Veranstaltung Betriebssysteme) werden sie im Kapitel 8 im Zusammenhang mit Zeigern noch ausfhrlich besprochen.

  • 2006 Pearson Education, Inc. All rights reserved.

    5

    7.2 Arrays

    Array (array, vector und C-Array) Gruppe aufeinanderfolgender Speicherpltze

    Alle haben denselben Typ. Index

    Ganzzahliger Positionszhler, der einen spezifischen Platz, d.h einspezifisches Element im Array anspricht

    Wird in eckige Klammern [ ] gesetzt Muss positive ganze Zahl oder ganzzahliger Ausdruck sein

    Das erste Element des Arrays hat den Index 0.

  • 2006 Pearson Education, Inc. All rights reserved.

    6

    Fig.7.1 | Array mit 12 Elementen

  • 2006 Pearson Education, Inc. All rights reserved.

    7

    7.2 Arrays

    Fr das Array c in Fig. 7.1 gilt c ist der Arrayname c hat 12 Elemente ( c[0], c[1], c[11] )

    Der Wert von c[0] ist 45

    Die eckigen Klammern, die einen Arrayindex umschlieen, sind in C++ ein Operator.

  • 2006 Pearson Education, Inc. All rights reserved.

    8

    Hufiger Programmierfehler

    Es ist wichtig, sich den Unterschied zwischen dem siebten Element des Arrays und dem Array Element mit Index 7 klar zu machen:Array Indices beginnen mit 0, so dass das siebte Element des Arrays den Index 6 hat, whrend das Array Element mit Index 7 das achte Element des Arrays ist. Dieser Unterschied fhrt hufig zu einem Eins-daneben-Fehler (off-by-one error).

  • 2006 Pearson Education, Inc. All rights reserved.

    9

    Fig.7.2 | Operatorvorrang und Assoziativit.

    Operatoren Assoziativitt Typ

    () [] links nach rechts Klammern, Index

    ++ -- static_cast< Typ >( Operand ) links nach rechts unr (postfix)

    ++ -- + - ! rechts nach links unr (prefix)

    * / % links nach rechts multiplikativ

    + - links nach rechts additiv

    > links nach rechts Ausgabe / Eingabe

    < >= links nach rechts Vergleich

    == != links nach rechts Gleichheit

    && links nach rechts logisches UND

    || links nach rechts logisches ODER

    ?: rechts nach links Bedingung

    = += -= *= /= %= rechts nach links Zuweisung

    , links nach rechts Komma

  • 2006 Pearson Education, Inc. All rights reserved.

    10

    7.3 Deklaration von arrays arrays belegen Platz im Speicher. Vom Programmierer werden Typ und Anzahl der

    Elemente als Typparameter bzw. Nichttypparameter des Klassentemplates array angegeben:

    array< int, 12 > c;

    c ist ein Array von 12 ints Die arraygre muss eine ganzzahlige Konstante grer

    als Null sein. arrays knnen Werte jedes Datentyps (auch selbst-

    definierte Klassen) enthalten, jedoch keine Referenzen. Mehrere arrays des gleichen Elementtyps und der

    gleichen Elementanzahl knnen in einer einzigenDeklaration deklariert werden.

    Mit einer kommaseparierten Liste der Namen

  • 2006 Pearson Education, Inc. All rights reserved.

    11

    7.4 Beispiele zum Gebrauch von arrays

    Einsatz einer Schleife zur Initialisierung der arrayelemente

    Deklaration des arrays mit Angabe von Typ und Anzahlder Elemente

    Wiederholungsanweisung, um jedes Arrayelementanzusprechen

    Im Krper der Wiederholungsanweisung wird jedeseinzelne Arrayelement initialisiert.

  • 2006 Pearson Education, Inc. All rights reserved.

    12Outline

    fig07_03.cpp

    (1 von 1)

    1 // Fig. 7.3: fig07_03.cpp 2 // Initializing an array's elements to zeros and printing the array. 3 #include 4 #include 5 #include 6 using namespace std; 7 8 int main() 9 { 10 array< int, 10 > n; // n is an array of 10 integers 11 // initialize elements of array n to 0 12 for( size_t i = 0; i < n.size(); ++i ) { 13 n[ i ] = 0; // set element at location i to 0 14 } 15 cout

  • 2006 Pearson Education, Inc. All rights reserved.

    13

    7.4 Beispiele zum Gebrauch von arrays

    Die Kontrollvariablen i und j, die die Indices der arrayelemente bezeichnen, werden mit dem Typ size_t deklariert.

    size_t stellt laut C++ Standard einen ganzzahligen Typ ohne Vorzeichen dar.

    Dieser Typ soll fr jede Variable, die die Gre oder die Indices von Arrays repsentiert, verwendet werden.

    size_t ist definiert im Namensbereich std und im Header , der von verschiedenen anderen Headern eingeschlossen wird.

  • 2006 Pearson Education, Inc. All rights reserved.

    14

    7.4 Beispiele zum Gebrauch von arrays

    Initialisierung eines arrays bei der Deklarationmit Hilfe einer Initialisierungsliste

    Initialisierungsliste Werte werden in geschweifte Klammern ({}) eingeschlossen. Einzelne Werte in der Liste werden durch Kommas getrennt. Beispielarray< int, 5 > n = { 10, 20, 30, 40, 50 };

    Es wird ein Array mit 5 Elementen erzeugt. Die Indexwerte sind 0, 1, 2, 3, 4. Die Werte werden mit 10, 20, 30, 40, 50

    initialisiert.

  • 2006 Pearson Education, Inc. All rights reserved.

    15

    7.4 Beispiele zum Gebrauch von arrays

    Initialisierung eines Arrays bei der Deklaration mit Hilfe einer Initialisierungsliste

    Falls weniger Initialisierungswerte angegeben werden als Elemente im Array vorhanden sind, werden die restlichen Elemente entsprechend ihres Typs wertinitialisiert ( int z.B. mit 0 ).

    Beispielarray< int, 10 > n = { 0 };

    Initialisiert das erste Element explizit mit 0. Initialisiert die restlichen neun Elemente implizit mit 0. Bei einer leeren Initialisierungsliste {} werden alle

    Elemente implizit wertinitialisiert.

  • 2006 Pearson Education, Inc. All rights reserved.

    16

    Hufiger Programmierfehler

    Falls mehr Initialisierungswerte angegeben werden als Elemente im Array vorhanden sind, fhrt dies zu einer Fehlermeldung des Compilers.

  • 2006 Pearson Education, Inc. All rights reserved.

    17 1 // Fig. 7.4: fig07_04.cpp 2 // Initializing an array in a declaration. 3 #include 4 #include 5 #include 6 using namespace std; 7 8 int main() 9 { 10 // use initializer list to initialize array n 11 array< int, 10 > n = { 32, 27, 64, 18, 95, 14, 90, 70, 60, 37 }; 12 13 cout

  • 2006 Pearson Education, Inc. All rights reserved.

    18

    7.4 Beispiele zum Gebrauch von arrays

    Beispiel: Festlegen der arraygre mit einerkonstanten Variablen und Setzen der arrayelemente aufgrund von Berechnungen

    Ein 10-elementiges array soll mit geraden Zahlen(beginnend mit 2) gefllt werden.

    Fr die Festlegung der Gre des arrays kann eine alsconst deklarierte Variable verwendet werden.

    Dann wird eine Wiederholungsstruktur benutzt, die den Wert fr das aktuelle Element berechnet und das arrayelement mit dem berechneten Wert initialisiert.

  • 2006 Pearson Education, Inc. All rights reserved.

    19 1 // Fig. 7.5: fig07_05.cpp 2 // Set array s to the even integers from 2 to 20. 3 #include 4 #include 5 #include 6 using namespace std; 7 8 int main() 9 { 10 // constant variable can be used to specify array size 11 const size_t arraySize = 10;12 array< int, arraySize > s; // array s has 10 elements 13 14 for( size_t i = 0; i < arraySize; ++i ) { // set the values 15 s[ i ] = 2 + 2 * i; 16 } 17 cout

  • 2006 Pearson Education, Inc. All rights reserved.

    20

    7.4 Beispiele zum Gebrauch von arrays

    Konstante Variablen Deklaration unter Verwendung des const Qualifizierers Auch als Namenskonstanten oder Read-Only-Variablen

    bezeichnet Mssen zum Zeitpunkt ihrer Deklaration mit einem

    konstanten Ausdruck initialisiert werden und knnen danach nicht mehr modifiziert werden

    Knnen berall dort stehen, wo ein konstanter Ausdruck erwartet wird

  • 2006 Pearson Education, Inc. All rights reserved.

    21

    Hufiger Programmierfehler

    Wird einer konstanten Variablen bei i