技術共有

C シリーズ-ベクトル (1)

2024-07-12

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

🌈个人主页:クラスメイトのユチェン 

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

Vectorの紹介と使い方

ベクターの概要

Vector で構築されるパラメータの型が char 型の場合、string と非常によく似ていますが、たとえば、vector の場合、両者には違いもあります。他の異なる型も考慮できますが、string は文字列のみを対象とします。、文字列を詳しく学習すると、他の STL の学習も容易になります。

  1. Vector は、可変サイズの配列を表すシーケンス コンテナーです。
  2. 配列と同様に、Vector も要素を格納するために連続ストレージ スペースを使用します。つまり、Vector の要素は配列と同様に効率的にアクセスできますが、配列とは異なり、そのサイズは動的に変更できます。そのサイズはコンテナーによって自動的に処理されます。
  3. 基本的に、Vector は動的に割り当てられた配列を使用して要素を格納します。新しい要素が挿入されると、記憶領域を増やすために番号を再割り当てする必要があります。このアプローチでは、新しい配列を割り当ててから、すべての要素をこの配列に移動します。これは、新しい要素がコンテナに追加されるたびに、Vector によってサイズが再割り当てされないため、時間の点で比較的コストのかかるタスクです。毎回。
  4. ベクター割り当てスペース戦略: ストレージ スペースは実際に必要なストレージ スペースよりも大きいため、ベクターは、スペースの使用量と再割り当てを考慮するために異なる戦略を使用するため、増加の可能性に対応するために追加のスペースを割り当てます。ただし、いずれの場合でも、再割り当ては常に行う必要があります。間隔サイズは対数的に増加するため、最後への要素の挿入は一定時間で完了します。
  5. したがって、Vector は、スペースを管理し、効率的な方法で動的に拡張する機能を得るために、より大きなストレージ スペースを占有します。
  6. 他の動的シーケンス コンテナーと比較して、Vector は要素にアクセスする場合は効率的です。末尾の要素の追加および削除は比較的効率的ですが、末尾以外の他の削除および挿入操作の効率は低くなります。

ベクターの使用

プッシュバック関数

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

実際、push_back については何も言うことはありません。Vector の元の記憶領域の後に文字が追加されます。

実際、ファイルには詳細な紹介があり、挿入中に十分なスペースがない場合、容量は自動的に拡張されます。

Vector 関数のトラバース方法については、ここでもさまざまな方法について説明します。

  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;

添え字 [] アクセス、イテレータ、範囲を含めて、これは基本的に前に説明した文字列と同じです。

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

 

Vector のさらにすばらしい点は、Vector を再利用して、List、文字列、または別の Vector などの他の要素を Vector に適用できることです。

string が適用される場合、シーケンス テーブルの各要素は String を表します。