C++ STLのベクトル(基礎編1)

Q1: ベクトルとは何ですか?

回答: ベクターはコンテナであり、コンテナは特定のタイプのオブジェクトのコレクションを管理するために使用されますC++ は、deque、list、vector、map などのさまざまなタイプのコンテナーを提供します。ベクトル(ベクトル)は、可変長配列つまり、配列の長さを自動的に変更する配列です (配列の長さは定義時に決定され、変更できませんが、ベクトル コンテナーの長さは固定されておらず、いつでも変更できます)。

Q2: ベクターの使い方は?

1. ヘッダーファイルを追加します

#include <vector>ベクターを使用する場合、通常使用する前にベクターを追加する必要があります(このステップは非常に重要です!! )

2. ベクトルの定義

vector<类型名> 变量名;
型名には、int、double、char、struct、または STL コンテナー (vector、set、queue) を指定できます。

vector<int> name;
vector<double> name;
vector<char> name;
vector<struct node> name;
vector<vector<int> > name;//注意:> >之间要加空格
  • ベクトル配列は 1 次元配列です
    (たとえばvector<int> name;、name は整数変数を格納する 1 次元配列の名前と同等です)。
  • ベクトル配列の配列として定義されている場合、それは 2 次元配列
    ( などvector<int> array[SZIE]; //二维变长数组)になります
    低次元は高次元のアドレスです(例: 2 次元配列では、その 1 次元形式はアドレスになります)

3. ベクトルの初期化

  • 方法1(直接法)
vector<int> v1={
    
    1,2,3,4,5};

現時点では、v1 は 5 つの要素を含む 1 次元配列に相当します。
注: 一部のバージョンのコンパイラは、このような初期化をサポートしていません。

  • 方法2(配列ポインタ方式)
   int a[5]={
    
    1,2,3,4,5};//先定义一个数组
   vector<int> v1(a,a+5);//注意末尾指针指向最后一个元素之后的位置
   //下面为遍历vector容器,输出结果,检测初始化结果是否正确
   for(int i=0;i<v1.size();i++) //v1.size()为获取容器的大小
       cout<<v1[i]<<' ';
   cout<<endl;
   **结果:1 2 3 4 5
  • 方法 3 (n 要素)
vector<int> v2(3,6);//将三个6赋值给v2
    for(int i=0;i<v2.size();i++)
        cout<<v2[i]<<' ';
    cout<<endl;
    **结果:6 6 6
  • 方法4(コピー方法)
vector<int> v3(v1);//将vector容器v1作为参数传给v3,则v3容器中的数据和v1中相同
    for(int i=0;i<v3.size();i++)
        cout<<v3[i]<<' ';
    cout<<endl;
    **结果:1 2 3 4 5 

注: パラメータとして渡される v1 は、ベクトル型、配列名は使用できません

  • 方法 5:assignメソッドを使用する
//方法1(数组指针)
    vector<int> v4,v5,v6,v7;
    v4.assign(a,a+5);
    for(int i=0;i<v4.size();i++)
        cout<<v4[i]<<' ';
    cout<<endl;
    //方法2()
    v5.assign(4,10);
    for (int i = 0; i < v5.size(); ++i)
        cout<<v5[i]<<' ';
    cout<<endl;
    //方法3(容器赋值容器)
    v6.assign(v1.begin(),v1.end());
    for (int i = 0; i < v6.size(); ++i)
        cout<<v6[i]<<' ';
    cout<<endl;
    **结果:1 2 3 4 5 
           10 10 10 10 
           1 2 3 4 5 

**補充:**間隔要素の割り当てを考えます。
たとえば、数値ベクトル コンテナ v1 があり、それをベクトル コンテナ v2 に割り当てたいとしますv1={1,2,3,4,5}{2,3}ポインタの向きを変更する次のようにストレージ範囲を変更します。

    v7.assign(v1.begin()+1,v1.end()-2);
    for (int i = 0; i < v7.size(); ++i) {
    
    
        cout<<v7[i]<<' ';
    }
    **结果:2 3

注: 終了ポインタは終了要素の次の位置を指します(たとえば、ここでの終了ポインタは要素 4 を指します)

4. ベクターコンテナ要素の出力

  • 1 つは、配列と同様の添字インデックスを使用してデータにアクセスすることです。ベクトル コンテナー v1 がある場合、v1 の最初の要素にアクセスしたい場合は、 v1[0] などを通じてアクセスできます。上記のコードはすべて添字インデックス付けメソッドです。
  • 2 番目の使用at()アクセス。例を参照してください。
    vector<int> v1;
    v1={
    
    1,2,3,4,5};
    for (int i = 0; i < v1.size(); ++i) {
    
    
        cout<<v1.at(i)<<' ';
    }
    cout<<endl;
    **结果:1 2 3 4 5 

拡大:では、これら 2 つのアクセス方法の違いは何でしょうか?
Vector は動的配列です 配列なので境界を越える可能性があります例を見てみましょう:

  1. 添字インデックス メソッドで配列の境界外アクセス状況が発生しました
vector<int> v1;
   v1={
    
    1,2,3,4,5};
   cout<<v1[6]<<endl;
   **结果:-1038988976
  1. at() メソッドで配列の境界外アクセス状況が発生しました
vector<int> v1;
   v1={
    
    1,2,3,4,5};
   cout<<v1.at(6)<<endl;
   **结果:terminate called after throwing an instance of 'std::out_of_range'

ここで、添字メソッドは配列が範囲外の場合にエラーを報告せず、文字化けを出力しますが、at()メソッドは間違った型を報告するため、at()このメソッドはコード エラーの発見に役立ちます。

C++STLのベクトル(基礎編2)

おすすめ

転載: blog.csdn.net/weixin_74334323/article/details/130171281