<mytype>使用 C++11 for() 循环遍历 vector<unique_ptr>

Iterating through vector<unique_ptr<mytype>> using C++11 for() loops

本文关键字:gt lt vector 遍历 unique 循环 ptr for mytype 使用 C++11      更新时间:2023-10-16

我得到了以下一批代码:

std::vector<std::unique_ptr<AVLTree_GeeksforGeeks>> AVLArray(100000);
/* Let's add some objects in the vector */
AVLTree_GeeksforGeeks *avl = new AVLTree_GeeksforGeeks();
avl->Insert[2]; avl->Insert[5]; AVL->Insert[0];
unique_ptr<AVLTree_GeeksforGeeks> unique_p(avl);
AVLArray[0] = move(unique_p);
/* we do this for a number of other trees, let's say another 9...
...
...
Now the vector has objects up until AVLTree[9] */
/* Let's try iterating through its valid, filled positions */
for(auto i : AVLTree )
{
   cout << "Hey there!n";    //This loop should print 10 "Hey there"s.
}

在for()循环的最后一部分出现编译错误。

DataStructures2013_2014main.cpp||In function 'int main()':|
DataStructures2013_2014main.cpp|158|error: use of deleted function 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = AVLTree_GeeksforGeeks; _Dp = std::default_delete<AVLTree_GeeksforGeeks>; std::unique_ptr<_Tp, _Dp> = std::unique_ptr<AVLTree_GeeksforGeeks>]'|
e:codeblocksmingwbin..libgccmingw324.7.1includec++bitsunique_ptr.h|256|error: declared here|
||=== Build finished: 2 errors, 0 warnings (0 minutes, 0 seconds) ===|

你知道我做错了什么吗?

循环

for (auto i: AVLTree) { ... }

尝试对CCD_ 1和CCD_。当然,std::unique_ptr<T>是不能复制的:每个指针只有一个std::unique_ptr<T>。它不会真的复制任何东西,而是它。那太糟糕了。

您想使用引用:

for (auto& i: AVLTree) { ... }

或者,如果你不修改它们

for (auto const& i: AVLTree) { ... }