std::array<int, 4> myarray = {1, 2, 3, 4};
std::array<int, 4> myarray2(std::begin(myarray),std::end(myarray)); //It throws error
私はmyarray2
を作成することができる唯一の方法は、コンストラクタに2 std::array<int, 4>::iterator
を通過させることであるならば、それは私がstd::array
でそれを作ることができ、または私はvector
を使わなければいけないことがありますか?私たちのために、パラメータパックの拡張を行いbegin()とend()を使ってstd :: arrayを作成することはできますか?
template<class=void,std::size_t...Is>
auto indexer(std::index_sequence<Is...>){
return [](auto&&f)->decltype(auto){
return decltype(f)(f)(std::integral_constant<std::size_t,Is>{}...);
};
}
template<std::size_t N>
auto indexer(){
return indexer(std::make_index_sequence<N>{});
}
:indexer
がある
いくつかの基本的な参考資料を見ては、コンストラクタが暗黙的に宣言されていることを明らかにすると集計の初期化の規則に従わなければなりません。それにはイテレータは含まれていないので、答えはノーです。 'std :: array'は、従来のCスタイルの配列のような固定/静的配列を表していることに注意してください。 –
C++ 17を使用する予定ですか? http://en.cppreference.com/w/cpp/container/array/begin – Rama
配列のサイズを知っているので、あなたは '* std :: begin(myarray)'、 '* std :: next std :: begin(myarray)) 'などのようにして、myarray2を通常の集約構文' std :: array myarray2 {a、b、c、d}; 'でビルドします。 –