Teknologian jakaminen

C-sarjan vektori (1)

2024-07-12

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

🌈个人主页:Luokkatoveri Yuchen 

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

Vectorin esittely ja käyttö

Johdatus Vectoriin

Kun vektorin muodostama parametrityyppi on char-tyyppi, se on hyvin samanlainen kuin merkkijono, mutta näiden kahden välillä on myös eroja. Esimerkiksi vektorin,Se voi ottaa huomioon muita eri tyyppejä, kun taas merkkijono voi olla vain merkkijonoja varten, ja kun olemme oppineet merkkijonon yksityiskohtaisesti, meidän on helpompi oppia muita STL-asioita.

  1. Vector on sekvenssisäiliö, joka edustaa muuttuvan kokoista taulukkoa.
  2. Kuten matriisi, Vector käyttää myös jatkuvaa tallennustilaa elementtien tallentamiseen, mikä tarkoittaa, että Vectorin elementtejä voidaan käyttää alaindeksien avulla. Se on yhtä tehokas kuin taulukko, mutta toisin kuin taulukon kokoa voidaan muuttaa dynaamisesti säiliö käsittelee sen koon automaattisesti.
  3. Pohjimmiltaan Vector käyttää dynaamisesti allokoitua taulukkoa elementtiensä tallentamiseen. Kun uusi elementti lisätään, numero on jaettava uudelleen tallennustilan lisäämiseksi. Lähestymistapa on allokoida uusi taulukko ja siirtää sitten kaikki elementit tähän taulukkoon. Tämä on ajallisesti suhteellisen kallis tehtävä, koska joka kerta kun uusi elementti lisätään säilöön, vektoria ei jaeta. Kokoa ei jaeta uudelleen. joka kerta.
  4. Vektorivarausstrategia: Vector varaa ylimääräistä tilaa mahdollisen kasvun huomioon ottamiseksi, koska tallennustila on suurempi kuin todellinen tarvittava tallennustila. Eri kirjastot käyttävät erilaisia ​​strategioita tilankäytön ja uudelleenallokoinnin punnitsemiseen, mutta joka tapauksessa uudelleenallokoinnin tulisi aina olla. logaritmisesti kasvava intervallikoko, joten elementin lisääminen loppuun tapahtuu vakioajassa.
  5. Siksi Vector vie enemmän tallennustilaa saadakseen kyvyn hallita tilaa ja kasvattaa sitä dynaamisesti tehokkaasti.
  6. Verrattuna muihin dynaamisiin sekvenssisäiliöihin, Vector on tehokkaampi, kun elementtejä käytetään lopussa, mutta se on vähemmän tehokasta muissa poisto- ja lisäystoiminnoissa, jotka eivät ole lopussa.

Vectorin käyttö

push_back-toiminto

  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. }

Itse asiassa push_backista ei ole mitään sanottavaa. Se lisää merkkejä Vectorin alkuperäisen tallennustilan jälkeen.

Itse asiassa tiedostossa on yksityiskohtainen esittely Kun lisäyksen aikana ei ole tarpeeksi tilaa, kapasiteettia laajennetaan automaattisesti.

Mitä tulee Vector-funktion läpikulkumenetelmiin, puhumme myös erilaisista menetelmistä täällä:

  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;

Sisältää alaindeksin [] pääsyn, iteraattorin ja alueen, tämä on periaatteessa sama kuin merkkijono, josta puhuimme aiemmin.

  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. }

 

Vectorissa on vielä hämmästyttävämpää, että sitä voidaan käyttää uudelleen ja käyttää muita asioita Vectorissa, kuten luetteloa, merkkijonoa tai jopa toista vektoria.

Jos merkkijonoa käytetään, jokainen sekvenssitaulukon elementti edustaa merkkijonoa.