次の2つのイテレータを取るベクトルのコンストラクタを使用することができます。たとえば、vector<double>
のイテレータを使用できます。
std::vector<double> init(10, 3.14);
std::vector<Item> vv(init.begin(), init.end());
Live demo。
それとも、初期化を行うために、独自のカスタムイテレータクラスを書くことができ:
struct ItemInitializer {
int index;
double value;
using value_type = double;
using difference_type = int;
using pointer = const double*;
using reference = const double&;
using iterator_category = std::forward_iterator_tag;
ItemInitializer() : index(0), value(0.0) {}
ItemInitializer(int index, double v = 0.0) : index(index), value(v) {}
bool operator!=(const ItemInitializer& other) const { return other.index != index; }
ItemInitializer& operator++() { index++; return *this; }
ItemInitializer operator++(int) { ItemInitializer ret(index, value); index++; return ret; }
const double& operator*() const { return value; }
const double* operator->() const { return &value; }
};
std::vector<Item> vv(ItemInitializer{0, 3.14}, ItemInitializer{10});
Live demo。
おそらく、ベクターが間違ったコンテナですが、代わりに['std :: array'](http://en.cppreference.com/w/cpp/container/array)を使うべきでしょうか?あるいは、あなたはあなたが持っている*実際の問題について詳しく調べることができますか? *なぜ*あなたはあなたが助けたい解決策を考案しましたか?これは非常に典型的な[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)タイプの質問です。 –
@Someprogrammerdude実際には 'std :: vector'や' std :: array'ではなく、組み込みの動的配列は目的に最も適したデータ構造です(動的ではあるが固定サイズで、変更はありません)。しかし、組み込みの動的配列は、この* emplace-while-constructing *機能をサポートしていません。 – Vahagn
"動的配列"(私はあなたが[*可変長配列*](https://en.wikipedia.org/wiki/Variable-length_array)を意味すると思います)は標準のC++では存在しません。いずれかの選択肢。それとも新しい[]を意味しますか?そしておそらくあなたが持っているオリジナルの問題*は別の方法で解決できますか? –