Forum: PC-Programmierung C++: vector<double>


von Walter T. (nicolas)


Lesenswert?

Hallo zusammen,

ich bin noch ziemlich am Anfang, C++ zu lernen, und ich stoße ab und an 
auf das Problem, dass ich nicht weiß, wie ich bestimmte Sachen 
aussprechen sollte.

Irgendwann habe ich mal gemerkt, dass ich mir Sachen, die ich nicht 
aussprechen kann, auch nicht merken kann.

Wie würde man die folgende Codezeile in natürlicher Sprache bezeihnen:
1
    vector<double> v1{1.1, 2.2, 3.3, 4.4, 5.5};
Irgendetwas wie:
"Deklariere ein Objekt v1 der Template-Klasse vector mit der 
Konkretisierung double und definiere es mit den 
Initialisierungs-Elementen 1.1 bis 5.5" ?

Allgemein: Kennt jemand einen guten C++-Einführung-Kurs mit gesprochener 
Sprache? Als Präsentation, Video, etc.

:
von Rolf M. (rmagnus)


Lesenswert?

Walter T. schrieb:
> Wie würde man die folgende Codezeile in natürlicher Sprache bezeihnen:
> vector<double> v1{1.1, 2.2, 3.3, 4.4, 5.5};
> Irgendetwas wie:
> "Deklariere

Defininere

> ein Objekt v1 der Template-Klasse vector mit der
> Konkretisierung double und definiere

initialisiere

> es mit den Initialisierungs-Elementen 1.1 bis 5.5" ?

Eine Definition legt eine Variable an, eine Deklaration macht sie 
bekannt, eine Initialisierung belegt sie mit einem initialen Wert.

von Walter T. (nicolas)


Lesenswert?

Mich interessieren mehr die Typenbezeichnungen mit 
Größer-Kleiner-Guillemets.

von Rolf M. (rmagnus)


Lesenswert?

Walter T. schrieb:
> Mich interessieren mehr die Typenbezeichnungen mit Größer-Kleiner-Guillemets.

Template-Klasse ist dafür wohl schon die richtige Bezeichnung, auch wenn 
mir eigentlich "Klassen-Template" lieber wäre, denn es ist ja eben 
selbst keine Klasse, sondern nur eine Vorlage für Klassen.
Ob jetzt "Konkretisierung double" eine gute Bezeichnung ist? 
Letztendlich ist double hier ein Template-Parameter. Ich wüsste jetzt 
auch nicht, wie man es formalsprachlich besser bezeichnen könnte. Ich 
nenne es meistens lax einen "vector aus double", ähnlih wie bei Arrays.

: Bearbeitet durch User
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Korrekter wäre glaube ich:

Instantiiere das Klassen-Template "vector" mit dem Typ-Argument 
"double", definiere ein Objekt "v1" von diesem Typ, und initialisiere es 
mit einer Initializer-Liste.

Ein wichtiger Punkt ist hier dass "vector" keine Klasse ist, sondern 
ein (Klassen-) template. Wenn man es mit Argumenten (hier: "double") 
instantiiert, erhält man eine Klasse (vector<double>).

Walter T. schrieb:
> Allgemein: Kennt jemand einen guten C++-Einführung-Kurs mit gesprochener
> Sprache? Als Präsentation, Video, etc.

Das Problem ist dass C++ sehr komplex ist. Eine Video-Einführung in C++ 
wäre sehr lang. Das lernt man daher besser mit Büchern. Einzelne Talks 
zu spezifischen C++-Themen gibt's natürlich viele, insbesondere 
Konferenz-Mitschnitte.

mMn macht es wenig Sinn zu versuchen, gelesenen Code in natürliche 
Sprache zu übersetzen. Das ist wie bei Fremdsprachen; diese muss man 
letztendlich auch "direkt" verstehen lernen, statt im Kopf erst alles in 
die Muttersprache zu übersetzen. Gerade bei komplexen Sprachen wie C++ 
würde die Übersetzung schnell so verworren, dass man noch weniger 
versteht.

von Walter T. (nicolas)


Lesenswert?

Niklas G. schrieb:
> Instantiiere das Klassen-Template "vector" mit dem Typ-Argument
> "double", definiere ein Objekt "v1" von diesem Typ, und initialisiere es
> mit einer Initializer-Liste.

Danke!

Niklas G. schrieb:
> Das Problem ist dass C++ sehr komplex ist. Eine Video-Einführung in C++
> wäre sehr lang. Das lernt man daher besser mit Büchern.

Das ist klar. Der Breymann hat in seiner aktuellen Ausgabe vom Oktober 
2020 1007 Seiten.

Niklas G. schrieb:
> mMn macht es wenig Sinn zu versuchen, gelesenen Code in natürliche
> Sprache zu übersetzen. Das ist wie bei Fremdsprachen; diese muss man
> letztendlich auch "direkt" verstehen lernen, statt im Kopf erst alles in
> die Muttersprache zu übersetzen.

Fremdsprachen sind ein guter Vergleich. Bei allen Fremdsprachen, die ich 
bislang gelernt habe, bin ich erst auf einen grünen Zweig gekommen, 
nachdem ich gelernt habe, wie man einen geschriebenen Satz laut 
vorliest. Vorher ist es nur eine Ansammlung von Zeichenketten.

Lerntypen sind unterschiedlich. Bei mir hat dabei gesprochene Sprache 
einen ähnlich hohen Stellenwert wie Handskizzen.

Schon allein deswegen, weil man sonst dem Eichhörnchen, das Nüsse aus 
dem Vogelhäuschen klaut und gerade zum Fenster hereinschaut, nicht 
erklären kann, woran man gerade knobelt.

: Bearbeitet durch User
von Dussel (Gast)


Lesenswert?

Walter T. schrieb:
> Allgemein: Kennt jemand einen guten C++-Einführung-Kurs mit gesprochener
> Sprache? Als Präsentation, Video, etc.
Ich kenne keinen, aber ich empfehle, eher auf englisch zu suchen. Es 
gibt mehr Universitäten, die ihre Vorlesungen auf Englisch 
veröffentlichen als auf Deutsch. Ich glaube, das MIT hat viele 
Vorlesungsvideos.

von Dirk K. (merciless)


Lesenswert?

Walter T. schrieb:
> Wie würde man die folgende Codezeile in natürlicher Sprache bezeihnen:
>
1
>     vector<double> v1{1.1, 2.2, 3.3, 4.4, 5.5};
2
>
> Irgendetwas wie:
> "Deklariere ein Objekt v1 der Template-Klasse vector mit der
> Konkretisierung double und definiere es mit den
> Initialisierungs-Elementen 1.1 bis 5.5" ?

Ich würde bei der natürlichsprachigen Bezeichnung
ausblenden, dass vector<T> eine Template-Klasse
ist. Das geht früher oder später ins Blut über und
es wird für dich selbstverständlich.

"Definiere einen Vector v1 und initialisiere ihn
mit den Werten 1.1, 2.2, 3.3, 4.4 und 5.5."

merciless

von Oliver S. (oliverso)


Lesenswert?

Niklas G. schrieb:
> Korrekter wäre glaube ich:
>
> Instantiiere das Klassen-Template "vector" mit dem Typ-Argument
> "double", definiere ein Objekt "v1" von diesem Typ, und initialisiere es
> mit einer Initializer-Liste.

In dem Fall ist es eigentlich wichtiger, zu wissen, was ein std::vector 
ist und macht. Dann ergibt sich der ganze Rest von selbst.

Oliver

: Bearbeitet durch User
von Walter T. (nicolas)


Lesenswert?

Dussel schrieb:
> Ich kenne keinen, aber ich empfehle, eher auf englisch zu suchen

Deutsch oder englisch ist mir erst einmal egal. Aber nach guten Videos 
suchen, halte ich für unmöglich.

Zum meinen Internet-Anfangstagen, als Google noch nicht existierte und 
AltaVista und Lycos der letzte Schrei waren, wurden gute Websites durch 
Mundpropaganda geteilt. Bei Google findet man auch kaum noch "sinnvolle 
Ergebnisse" after:2017 -Pinterest -quora, ohne genau zu wissen, nach 
welchem Video man sucht. Die Google-Suche hat die Browser-Adresszeile 
fast zu 100% ersetzt.

Beitrag #6486170 wurde von einem Moderator gelöscht.
von Oliver S. (oliverso)


Lesenswert?

Walter T. schrieb:
> Deutsch oder englisch ist mir erst einmal egal. Aber nach guten Videos
> suchen, halte ich für unmöglich.

Such nach cppCon. Da gibt es neben den fortgeschrittenen „bleeding 
edge“-Vorträgen auch immer wieder mal C++-Grundwissen.

Oliver

von A. B. (Gast)


Lesenswert?

Eins nach dem anderen :

vector<double> ist eine Spezialisierung der class std::vector für den 
type <double>
1
namespace std {
2
3
template<class T,                         //
4
         class Allocator = allocator<T>>  //
5
  class vector { ...
6
//************

vector<double> v1 ist eine Deklaration der Variablen v1 mit dem Typ 
vector<double>

vector<double> v1 {1.1, 2.2, 3.3, 4.4, 5.5}; ist eine
Deklaration mit Initialisierung der Variablen v1 vom Typ 
vector<double>

**************************
template< .. > : Die Zeichen < und > haben in diesem Zusammenhang 
überhaupt nix mit der Bedeutung "grösser" oder "kleiner" gemein.

**************************
Anleitung deutschsprachig :
in "Startpage.com" den Such-Begriff länderspezifisch suchen: D,A,CH(D)

von Wilhelm M. (wimalopaan)


Lesenswert?

A. B. schrieb:
> vector<double> ist eine Spezialisierung der class std::vector für den
> type <double>

Nein,

es ist die Instanziierung des Templates std::vector<> für den Datentyp 
double. Oder: es ist die Parametrierung des generischen Typs 
std::vector<> mit dem Datentyp double.

std::vector<> ist ein template (generischer Datentyp)
std::vector<double> ist ein konkreter Typ.

In der Std-Lib gibt es keine Spezialisierung von std::vector<> für 
double. Spezialisierungen sind Ausnahmen vom allg. template.

A. B. schrieb:
> vector<double> v1 ist eine Deklaration der Variablen v1 mit dem Typ
> vector<double>

Nein,

std::vector<double> v1;

ist die Definition der Variablen v1 (wobei jede Definition auch wieder 
eine Definition ist).

von mh (Gast)


Lesenswert?

Wilhelm M. schrieb:
> A. B. schrieb:
>> vector<double> ist eine Spezialisierung der class std::vector für den
>> type <double>
>
> Nein,
>
> es ist die Instanziierung des Templates std::vector<> für den Datentyp
> double. Oder: es ist die Parametrierung des generischen Typs
> std::vector<> mit dem Datentyp double.
>
> std::vector<> ist ein template (generischer Datentyp)
> std::vector<double> ist ein konkreter Typ.
>
> In der Std-Lib gibt es keine Spezialisierung von std::vector<> für
> double. Spezialisierungen sind Ausnahmen vom allg. template.

Du könntest an dieser Stelle auf den std::vector<bool> hinweisen ;-)

von S. R. (svenska)


Lesenswert?

Walter T. schrieb:
> Wie würde man die folgende Codezeile in natürlicher Sprache bezeihnen:
> vector<double> v1{1.1, 2.2, 3.3, 4.4, 5.5};

In meinem Kopf:
Deklariere einen Vektor v1 aus Doubles, mit den Werten 1.1 bis 5.5.

Da ist alles drin, was du brauchst, um das Ding zu verwenden:
- Typ des Containers (Vektor)
- Typ des Inhaltes (Double)
- initialer Inhalt

von Wilhelm M. (wimalopaan)


Lesenswert?

S. R. schrieb:
> Deklariere einen Vektor v1 aus Doubles, mit den Werten 1.1 bis 5.5.

Es ist immer noch eine Definition!

Beitrag #6490783 wurde von einem Moderator gelöscht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.