要了解C++ 11的複雜性,我正在玩unique_ptr
。用iota初始化unique_ptr的容器
我想知道,有沒有什麼辦法可以用iota
來初始化一個Container的unique_ptr
?
我開始與獨特-PTR-更少的解決方案,工作正常:
std::vector<int> nums(98); // 98 x 0
std::iota(begin(nums), end(alleZahlen), 3); // 3..100
現在,讓我們做到這一點,據我們可以用unique_ptr
std::vector<std::unique_ptr<int>> nums(98); // 98 x nullptr
std::unique_ptr three{ new int{3} };
std::iota(begin(nums), end(nums), std::move{three});
這顯然會失敗。原因:
- 雖然我與
move
標記three
作爲&&
這可能不足以複製/移動的初始值到容器中。 ++initValue
也將無法正常工作,因爲initValue
的類型爲unique_ptr<int>
,並且沒有定義operator++
。但是:我們可以定義一個免費函數unique_ptr<int> operator++(const unique_ptr<int>&);
,那至少可以解決這個問題。- 但是,複製/移動該操作的結果在
unique_ptr
中再次不被允許,這一次我看不到如何欺騙編譯器使用move
。
那麼,這就是我停下來的地方。我想知道如果我錯過了一些有趣的想法,告訴編譯器他可能會move
operator++
的結果。或者還有其他障礙嗎?
我承認,這就像你說的「平方pe成圓洞」,用於學習東西。好的解決方案 – towi