Click here to load reader
View
215
Download
0
Embed Size (px)
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