C++ チュートリアルのベクトル

バックグラウンド

ベクトルは一連のオブジェクトであり、すべて同じタイプです。各オブジェクトには、オブジェクトを取得するためのインデックスがあります。ベクトルには他のオブジェクトが含まれているため、通常、コンテナと見なされます。コンテナについては後で詳しく紹介しますVector を使用するには、関連するヘッダー ファイルを導入する必要がありますが、次の宣言により直接 vetcor を使用できます。

# include<vector>
using std::vector;

Vector はクラス テンプレートです。C++ にはクラス テンプレートと関数テンプレートの両方があります。テンプレートを作成するには、C++ についての深い理解が必要です。後ほど、C++ テンプレートの関連内容を詳しく紹介するコンテンツが登場します。幸いなことに、C++ テンプレートを作成する必要はありません。テンプレートをよく知っているので使用できます。テンプレートはクラスや関数そのものではありません。逆に、テンプレートはコンパイラがクラスや関数を生成するためのガイドラインであると考えられています。コンパイラがテンプレートからクラスや関数を作成するプロセスはインスタンス化と呼ばれます。テンプレートを使用するときは、次のことを指定する必要があります。コンパイラへの要件 どのタイプのクラスまたは関数が生成されるか (ベクトルの場合)、提供する必要がある追加情報は、ベクトルに格納されているオブジェクトのタイプです。

 vector<int> ivec; //vector包含int类型
 vector<vector<string>> file; //vector存储的事vector类型

ベクトルは型ではなくテンプレートであり、ベクトルから派生した型には要素の型が含まれている必要があります。任意の型を含むベクトルを定義できますが、参照はオブジェクトではないため、参照のベクトルを定義することはできません。

一部の古いバージョンの C++ ではベクトルの定義が現在のものと異なり、以下に示すように山括弧内にスペースを追加する必要があり、コンパイラではこの古い宣言方法が必要であることに注意してください。

vector<vector<int> > vecs;

定義と初期化

以下に、ベクトルを定義および初期化する 6 つの方法を示します。

 vector<string> v1; // vector包含string类型对象,默认初始化,v1为空
 vector<string> v2(v1); //v2复制v1的所有内容
 vector<string> v3 = v1; //v3也是复制v1的所有内容
 vector<string> v4(4, "123"); // v4中有四个”123“
 vector<string> v5(10); //v5有10个初始化值的对象
 vector<string> v6{"12", "23"}; // 列表初始化,v6中有两个对象”12“, ”23“
 vector<string> v7 = {"21", "32"}; //列表初始化,v7中有两个对象”21“, "32"

リストの初期化メソッドは C++99 ではサポートされていないことに注意してください。C++11 以降である必要があります。それ以外の場合はコンパイルされてエラーが報告されます。

要素を追加

データが少ない場合、他のベクトルをコピーする場合、またはすべての要素を値に初期化したい場合は、ベクトルのすべての要素を直接初期化することをお勧めします。より一般的な状況は、ベクトルを作成するときです。必要な要素の数がわからない、または必要なすべての要素の値がわからない、すべての要素の値がわかっていたとしても、作成時にそれぞれの値を指定するのは非常に面倒ですベクトル。

簡単な例として、値が 0 から 9 までのベクトルが必要な場合、リスト初期化を使用して簡単にベクトルを初期化できますが、0 から 99 または 0 から 999 のベクトルが必要な場合はどうなるでしょうか。より良い方法の 1 つは、最初に空のベクトルを作成し、次に Push_back を使用して実行時に要素を追加することです。push_back 操作により、値をベクトルの末尾に配置できます。例は次のとおりです。

vector<int> v2;
    for (int i = 0; i < 100; i++) {
        v2.push_back(i);
    }
}

ベクトルは、push_back に加えて、次のような他の演算も提供します。そのほとんどは文字列型に似ています。

操作する 説明
v.empty() ベクトルが空かどうかを判断する
v.size() ベクターの容量を取得する
v[n] vetor の n 番目の要素を取得します
v1=v2 v2 の値を v1 にコピーします
v1 = {a、b、c} v1 の値を {a, b, c} に置き換えます。

文字列型と同様に、添字を介してベクトルの要素を取得でき、ベクトルの添字も 0 から始まります。ベクトルが const でない場合は、添字を介して要素を取得し、その値を変更することもできます。 。同時に添え字を計算して、その位置の値を直接取得することができます。たとえば、値が 0 ~ 100 のスコアがあり、これらのスコアを 0 ~ 8、10 ~ 19 などの間隔に分割し、各間隔のスコアの数を計算したいとします。

vector<int> scores(11, 0);
    unsigned grade;
    while (std::cin >> grade) {
        ++scores[grade/10];
    }

添字は既存の要素のみを取得でき、要素を追加することはできないため、空のベクトルの添字を介して要素を追加することはできないことに注意してください。

おすすめ

転載: blog.csdn.net/QStack/article/details/128962208