[C ++迭代器初始化没有默认构造函数的对象的集合

问题描述 投票:0回答:1

我有一个没有明智的默认构造函数的类Foo。我也希望保留副本分配运算符的私有性,尽管这可能变得不可能。 (我想通过具有const字段和少数将const方式转换为私有且在对象生命周期早期的变种器,使该类“几乎”不变,从而使线程安全。)

在这些约束下创建std::vector<Foo>有点挑战。我想出了一个其他地方都没有见过的解决方案(例如,参见前面的SO问题1)。我有一个自定义迭代器,当取消引用时,它将创建一个Foo。设置时,每次调用将递增到向量中的下一个Foo值。顺序很容易定义。我在operator++上定义了nextadvancedistanceoperator*CustomIterator

然后我有

std::vector<Foo> foo_vec{CustomIterator(0), CustomIterator(size_of_vector)};

没有访问问题。没有不必要的结构。没有副本。有人看到这个问题吗?

c++ collections default-constructor
1个回答
0
投票
#include <vector> class X { explicit X(int value) : value_(value) {} X& operator=(const X&) = default; friend std::vector<X> generate(int from, int to); public: const int value_; }; // simplest factory ever std::vector<X> generate(int from, int to) { std::vector<X> result; result.reserve(to - from); for (int k = from; k < to; ++k) { result.emplace_back(std::move(X(k))); } return std::vector<X>(); } int main() { auto v = generate(0, 10); static_cast<void>(v); }
© www.soinside.com 2019 - 2024. All rights reserved.