C +ベクトル


ベクトルは標準的な配列に似ていますが、動的でありえます.これは固定サイズがなく、必要に応じてリサイズされることを意味します.それは標準のテンプレートライブラリ(STL)の一部であり、あなたのファイルに含める必要があります#include <vector> .
通常の配列と同様に、データ型と名前を指定します.必要に応じてベクトルを初期化するためにサイズを指定することができます.また、ベクトルの各インデックスを初期化する方法を指定できます.また、別のベクトルの内容でベクトルを初期化することもできます.
std::vector<int> numsA;
std::vector<int> numsB(5);
std::vector<int> numsC(5, 9);
std::vector<int> numsD(numsC);
numsA はサイズ0のベクトルです.numsB はサイズ5のベクトルであり、各インデックスは値0で初期化される.numsC はサイズ5のベクトルであり、各インデックスは値9で初期化される.最後にnumsD の内容のコピーに初期化されるnumsC , それは、それが9 sで満たされるサイズ5のベクトルになります.

操作
インデックスに格納されている要素を取得し、そのインデックスの値を変更できます.
  • v.at(index) 指定したインデックスの要素を返す
  • v[index] 指定したインデックスの要素を返す
  • v.front() 最初の要素を返す
  • v.back() 最後の要素を返す
  • 覚えておいてください.front() and back() ベクトルが空であるかどうかを確認するのをチェックしないでください.それがそうであるならば、あなたのコードはコンパイルされます、しかし、それは止まります、そして、あなたはAを得ますEXC_BAD_ACCESS エラーです.また、あなたはout_of_range 使用しようとするとエラーat() 作成したものの範囲外のインデックスを指定します.
    // create a char array of size 4
    std::vector<char> alpha(4);
    
    // fill values at specific indices
    alpha.front() = 'A';
    alpha[1] = 'B';
    alpha.at(2) = 'C';
    alpha.back() = 'D';
    
    // display values at specific indices
    std::cout << alpha.front() << "\n";
    std::cout << alpha[1] << "\n";
    std::cout << alpha.at(2) << "\n";
    std::cout << alpha.back() << "\n";
    
    // output
    A
    B
    C
    D
    

    メンバー関数
    使用できるクラスベクトルには多くの関数があります.
  • v.capacity() より多くのスペースを再配置する必要なしで、ベクトルに格納されることができる要素の最大数を返します
  • v.empty() ベクトルが空の場合、true ( 1 )を返します;false ( 0 )
  • v.size() ベクトルのサイズを返す
  • v.max_size() ベクトルに挿入できる要素の最大数を返す
  • std::vector<char> alpha(4);
    
    std::cout << alpha.empty() << "\n";
    std::cout << alpha.capacity() << "\n";
    std::cout << alpha.size() << "\n";
    std::cout << alpha.max_size() << "\n";
    
    // output
    0
    4
    4
    9223372036854775807
    
  • v.clear() ベクトルからすべての要素を削除する
  • // initialize 4 elements to 'A'
    std::vector<char> alpha(4, 'A');
    
    std::cout << alpha.empty() << "\n";
    alpha.clear();
    std::cout << alpha.empty() << "\n";
    
    // output
    0
    1
    
  • v.push_back() ベクトルの最後に要素をプッシュする
  • v.pop_back() ベクトルの最後に要素を削除する
  • // create empty vector
    std::vector<char> alpha;
    
    // push elements into vector
    alpha.push_back('A');
    alpha.push_back('B');
    alpha.push_back('C');
    
    alpha.pop_back(); // remove last element 'C'
    
    // loop through elements of vector and display values
    for (int i = 0; i < alpha.size(); i++)
      std::cout << i << ": " << alpha[i] << std::endl;
    
    // output
    0: A
    1: B
    
    より多くのメンバー関数を見つけることができますhere .

    不利
    ベクトルが動的であるので、彼らはより多くの要素を加えることができるように、彼らが彼らが含む要素のために必要であるより多くのスペースをとるかもしれません.彼らがより多くの要素にフィットするためにリサイズされる必要があるとき、メモリは再配置されなければなりません.したがって、ベクトルがより多くのメモリを消費し、いくつかのパフォーマンスオーバーヘッドが配列に比べてあります.

    更なる読書/引用
  • C++プログラミング:データ構造を含むプログラム設計
  • Cplusplus.com - std::vector