C++ でベクトルを配列に変換する方法

  1. data() メソッドを使用して vector を配列に変換する
  2. 演算子の & アドレスを用いて vector を配列に変換する
  3. copy() 関数を使用して vector を配列に変換する

この記事では、C++ でベクトルを配列に変換する方法を紹介します。

data() メソッドを使用して vector を配列に変換する

C++ 標準では,vector のコンテナ要素がメモリ内に連続して格納されることが保証されているので,組み込みのベクトルメソッドである data を呼び出して,次のコードサンプルに示すように,新たに宣言された double ポインタに戻り値のアドレスを代入することができます.

d_arr ポインタを用いて要素を変更すると,元のベクトルのデータ要素が変更されることに注意してください.

#include <iostream>
#include <vector>
#include <iterator>

using std::cout; using std::cin;
using std::endl; using std::vector;
using std::copy;

int main()
{
    vector<double> arr {-3.5, -21.1, -1.99, 0.129, 2.5, 3.111};

    copy(arr.begin(), arr.end(),
         std::ostream_iterator<double>(cout,"; "));
    cout << endl;

    double *d_arr = arr.data();
    for (size_t i = 0; i < arr.size(); ++i) {
        cout << d_arr[i] << "; ";
    }
    cout << endl;

    return EXIT_SUCCESS;
}

出力:

-3.5; -21.1; -1.99; 0.129; 2.5; 3.111;
-3.5; -21.1; -1.99; 0.129; 2.5; 3.111;

演算子の & アドレスを用いて vector を配列に変換する

あるいは、メモリ内のオブジェクトのアドレスを取り、新たに宣言された double へのポインタに代入するアンパサンド演算子を使うこともできます。

この例では、vector の最初の要素のアドレスを取得していますが、他の要素へのポインタを抽出して必要に応じて演算を行うこともできます。

要素へのアクセスには d_arr[index] 配列記法を用いることができます。

#include <iostream>
#include <vector>
#include <iterator>

using std::cout; using std::cin;
using std::endl; using std::vector;
using std::copy;

int main()
{
    vector<double> arr {-3.5, -21.1, -1.99, 0.129, 2.5, 3.111};

    copy(arr.begin(), arr.end(),
         std::ostream_iterator<double>(cout,"; "));
    cout << endl;

    double *d_arr = &arr[0];
    for (size_t i = 0; i < arr.size(); ++i) {
        cout << d_arr[i] << "; ";
    }
    cout << endl;

    return EXIT_SUCCESS;
}

copy() 関数を使用して vector を配列に変換する

copy() メソッドを利用してベクトルを double 配列に変換し、データ要素を別のメモリにコピーすることができます。後で、元の vector データを変更することを気にせずにデータを変更することができます。

ここでは、スタックメモリとして確保された d_arr を 6 個の要素で固定して宣言していることに注目してください。ほとんどのシナリオでは、配列のサイズが事前にわからないので、newmalloc のようなメソッドを使って動的なメモリ割り当てを行う必要があります。

#include <iostream>
#include <vector>
#include <iterator>

using std::cout; using std::cin;
using std::endl; using std::vector;
using std::copy;

int main()
{
    vector<double> arr {-3.5, -21.1, -1.99, 0.129, 2.5, 3.111};

    copy(arr.begin(), arr.end(),
         std::ostream_iterator<double>(cout,"; "));
    cout << endl;

    double d_arr[6];
    copy(arr.begin(), arr.end(), d_arr);
    for (size_t i = 0; i < arr.size(); ++i) {
        cout << d_arr[i] << "; ";
    }
    cout << endl;

    return EXIT_SUCCESS;
}

出力:

new_vec - | 97 | 98 | 99 | 100 | 101 |

関連記事 - C++ Vector

  • C++ で vector を初期化する方法
  • C++ で vector の内容を印刷する方法
  • comments powered by Disqus