要了解C ++ 11的复杂性,我正在尝试使用unique_ptr。
我想知道,有没有办法用iota初始化一个unique_ptr的容器?
我从独特的ptr-less开始……
也许 std::generate_n 对此更好的算法?
std::generate_n
std::vector<std::unique_ptr<int>> v; { v.reserve(98); int n = 2; std::generate_n(std::back_inserter(v), 98, [&n]() { return std::make_unique<int>(++n); }); }
为了结束98个实例 unique_ptr ,必须有98个电话 new 。你试图逃脱只有一个 - 不可能飞。
unique_ptr
new
如果你真的想把一个方钉钉在圆孔上,你可以这样做 这样的事情 :
#include <algorithm> #include <iostream> #include <memory> #include <vector> class MakeIntPtr { public: explicit MakeIntPtr(int v) : value_(v) {} operator std::unique_ptr<int>() { return std::unique_ptr<int>(new int(value_)); } MakeIntPtr& operator++() { ++value_; return *this; } private: int value_; }; int main() { std::vector<std::unique_ptr<int>> nums(98); std::iota(begin(nums), end(nums), MakeIntPtr(3)); std::cout << *nums[0] << ' ' << *nums[1] << ' ' << *nums[2]; return 0; }