std::vector
のデータからstd::array
を作成しようとしています。私は現在、この行っている:ベクトルから配列を初期化する方法は? (配列へのポインタのキャスト方法)
#include <vector>
#include <array>
int main(void)
{
std::vector<int> vec{{1, 2, 3, 4, 5}};
std::array<int, 5> arr{static_cast<int [5]>(vec.data())};
(void)arr;
return 0;
}
をしかし、GCCは、このキャストを受け入れません:
error: invalid static_cast from type ‘int*’ to type ‘int [5]’
私たちは、このキャストを行うことができない理由の配列がそうポインタとして使用することができると思いましたか?
編集:私の質問は約の初期化(建設)のstd::array
のため、これはCopy std::vector into std::arrayの複製ではありません。コピーしないでください。
編集:私はこの行っている:
#include <vector>
#include <array>
int main(void)
{
std::vector<int> vec{{1, 2, 3, 4, 5}};
int *a(vec.data());
std::array<int, 5> arr{*reinterpret_cast<int (*)[5]>(&a)};
(void)arr;
return 0;
}
をしかし、配列が初期化されません... GCCは言う:
error: array must be initialized with a brace-enclosed initializer
この初期化ではどうなるでしょうか?あなたはポインタとサイズを提供し、コンストラクタはそれをコピーしますか?そして、 'int *'を 'int [5]'にキャストできるとはどのように思いますか? – Chiel
@Chiel配列をCのlitteral配列のように初期化します。私はそれをベクトルの 'data()'メソッドから供給します。それが不可能な場合、理由は何ですか? – Boiethios
@HostileFork配列からポインタへのC++のやり方はありますか?配列のアドレスとサイズを知っているので、なぜここではできませんでしたか? – Boiethios