c++ Vektor-position auf 1 gesetzt statt 0
Ich habe eine Frage zu vector position. wie wir wissen, wissen, dass, wenn wir etwas lagern, in einen Vektor. es wird beginnen, speichern Sie das erste element an position 0.
also ich habe zum Beispiel 3 Dinge in meinem vector
vector position 0 ->itemOne
vector position 1 ->itemTwo
vector position 2 ->itemThree.
ist es trotzdem kann ich tun, um das erste element speichern in vector position 1 position 0?
- Nein. Und warum würden Sie wollen?
- ich Sie sagen, dass das, was Sie tun möchten, ist höchst unrecommended, aber es wäre möglich, dies zu erreichen, indem ein dummy-element an position 0 und ignorieren es einfach.
- C/C++ verwendet 0-basierte Indizierung, denn es ist weniger anfällig für off-by-one-Fehler, und weil es die Natürliche Korrespondenz zu adressieren. Wenn Sie auch sonst tun, das einzige was Sie erreichen werden ist wartbaren code.
- vielen Dank für die Anregung
- Ich fürchte, du hast zu akzeptieren, dass es 0-position basierte Sprach-und eigentlich sollte es das. Bitte nicht schreiben code, der verhält sich unerwartet über die Indizes, weil es schwer zu pflegen und werden Probleme verursachen, Wann immer Sie wollen, aufrufen von Funktionen, die von anderen geschrieben.
- Verwenden Sie die Pascal 😉 jk
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie einen ersten dummy-element. Bitte nicht wenn, jeder mit C++ erwartet, dass die Vektoren in 0-basiert ist.
Wenn das ist nicht, was Sie im Sinn hatte, dann Nein, es gibt keine Möglichkeit. Ganz einfach, weil das element in der ersten position wird aufgerufen mit dem index
0
. Soposition 1
ist Ihre Darstellungvec[0]
. Nur einen Namen.Oder wechseln Sie zu Pascal.
Können Sie erstellen einen wrapper für Vektor-und überschreiben der
[]
Betreiber. Aber ich glaube, das ist absolut nicht ratsam, wie jeder vernünftige Entwickler wird irrezuführen, indem Sie Ihren code.at(n)
wie die Methode mit genauer Bezeichnung, eine andere Sache ist, dass der wrapper, wie diese nicht Aussehen sollten wie ein std::vector.Ja. Sie können zum einfügen eines dummy in position 0. Und der Reale Wert einer später auf.
Sicherlich möchten Sie zu iterieren UND den Zugriff mit "menschlich Indexer".
Dies wird meist nicht für den letzten Eintrag.
Diese Sprache ist index null-basiert ist.
Vektor ist einfach nur ein array, so ist diese 0-indiziert. Natürlich können Sie speichern eine dummy-Daten auf die position 0, aber ich empfehlen Sie, subtrahieren Sie 1 von der position, die Sie wünschen.
Oder wenn Sie einige finden können-Bibliothek (wrapper) verwendet, 1-indizierten Vektor wie:
https://www.rosettacommons.org/manuals/archive/rosetta3.4_user_guide/d3/dd5/classutility_1_1vector1.html
Oder Sie können einfach erstellen Sie die gewünschte Klasse, die den Zugriff auf das gewünschte element, indem der index beginnt mit 1.