Technologieaustausch

C-Serie-Vektor (1)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

🌈个人主页:Klassenkamerad Yuchen 

💫个人格言:“成为自己未来的主人~”   

Einführung und Verwendung von Vector

Einführung in Vector

Wenn der vom Vektor erstellte Parametertyp der Typ char ist, ist er dem Typ string sehr ähnlich, es gibt jedoch auch Unterschiede zwischen den beiden. Beispielsweise gilt für vector:Es kann andere unterschiedliche Typen berücksichtigen, während string nur für Strings gelten kann, und nachdem wir String im Detail gelernt haben, wird es für uns einfacher, andere STL-Dinge zu lernen.

  1. Vector ist ein Sequenzcontainer, der ein Array variabler Größe darstellt.
  2. Genau wie ein Array verwendet Vector auch kontinuierlichen Speicherplatz zum Speichern von Elementen, was bedeutet, dass auf die Elemente von Vector genauso effizient zugegriffen werden kann wie ein Array, aber im Gegensatz zu einem Array kann seine Größe dynamisch geändert werden Seine Größe wird vom Container automatisch verwaltet.
  3. Im Wesentlichen verwendet Vector ein dynamisch zugewiesenes Array zum Speichern seiner Elemente. Wenn ein neues Element eingefügt wird, muss die Anzahl neu zugewiesen werden, um den Speicherplatz zu erhöhen. Der Ansatz besteht darin, ein neues Array zuzuweisen und dann alle Elemente in dieses Array zu verschieben. Dies ist eine relativ kostspielige Aufgabe, da Vector dies nicht tut, wenn ein neues Element zum Container hinzugefügt wird Die Größe wird nicht neu zugewiesen jedes Mal.
  4. Vector-Speicherplatzzuweisungsstrategie: Vector weist etwas zusätzlichen Speicherplatz zu, um einem möglichen Wachstum Rechnung zu tragen, da der Speicherplatz größer ist als der tatsächlich benötigte Speicherplatz. Verschiedene Bibliotheken verwenden unterschiedliche Strategien, um Speicherplatznutzung und Neuzuweisung abzuwägen, aber in jedem Fall sollten Neuzuweisungen immer erfolgen mit logarithmisch zunehmender Intervallgröße, so dass das Einfügen eines Elements am Ende in konstanter Zeit erfolgt.
  5. Daher benötigt Vector mehr Speicherplatz, um den Speicherplatz verwalten und dynamisch und effizient vergrößern zu können.
  6. Im Vergleich zu anderen dynamischen Sequenzcontainern ist Vector beim Zugriff auf Elemente effizienter. Das Hinzufügen und Löschen von Elementen am Ende ist relativ effizient, bei anderen Lösch- und Einfügevorgängen, die nicht am Ende erfolgen, ist es jedoch weniger effizient.

Verwendung von Vector

push_back-Funktion

  1. void test_vector1()
  2. {
  3. vector<double> v2;
  4. vector<int> v1;
  5. v1.push_back(1);
  6. v1.push_back(2);
  7. v1.push_back(3);
  8. v1.push_back(4);
  9. for (size_t i = 0; i < v1.size(); i++)
  10. {
  11. cout << v1[i] << " ";
  12. }
  13. cout << endl;
  14. }
  15. int main()
  16. {
  17. test_vector1();
  18. return 0;
  19. }

Tatsächlich gibt es nichts zu push_back zu sagen. Es werden Zeichen nach dem ursprünglichen Speicherplatz des Vektors hinzugefügt.

Tatsächlich gibt es in der Datei eine detaillierte Einführung. Wenn beim Einfügen nicht genügend Platz vorhanden ist, wird die Kapazität automatisch erweitert.

Was die Durchlaufmethoden der Vektorfunktion betrifft, werden wir hier auch über verschiedene Methoden sprechen:

  1. for (size_t i = 0; i < v1.size(); i++)
  2. {
  3. cout << v1[i] << " ";
  4. }
  5. cout << endl;
  6. for (size_t i = 0; i < v1.size(); i++)
  7. {
  8. cout << v1[i] << " ";
  9. }
  10. cout << endl;
  11. vector<int>::iterator it1 = v1.begin();
  12. while (it1 != v1.end())
  13. {
  14. cout << *it1 << " ";
  15. it1++;
  16. }
  17. cout << endl;
  18. for (auto e : v1)
  19. {
  20. cout << e << " ";
  21. }
  22. cout << endl;

Einschließlich Subscript-[]-Zugriff, Iterator und Bereich für ist dies im Grunde dasselbe wie die Zeichenfolge, über die wir zuvor gesprochen haben.

  1. void test_vector2()
  2. {
  3. vector<string> v2;
  4. string s1("张三");
  5. v2.push_back(s1);
  6. v2.push_back(string("李四"));
  7. v2.push_back("王五");
  8. v2[1] += "来";
  9. for (const auto& e : v2)
  10. {
  11. cout << e << " ";
  12. }
  13. cout << endl;
  14. }
  15. int main()
  16. {
  17. test_vector2();
  18. return 0;
  19. }

 

Was an Vector noch erstaunlicher ist, ist, dass es wiederverwendet werden und andere Dinge in Vector anwenden kann, wie z. B. eine Liste, einen String oder sogar einen anderen Vector.

Wenn ein String angewendet wird, stellt jedes Element der Sequenztabelle einen String dar.