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

 imjob1234_34706 发布于 2023-02-13 18:33

我有以下一批代码:

std::vector> 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 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_2014\main.cpp||In function 'int main()':|
\DataStructures2013_2014\main.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; std::unique_ptr<_Tp, _Dp> = std::unique_ptr]'|
e:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\unique_ptr.h|256|error: declared here|
||=== Build finished: 2 errors, 0 warnings (0 minutes, 0 seconds) ===|

关于我做错了什么的任何想法?

1 个回答
  • 循环

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

    试图使该范围的各元素的副本中AVLTree.begin()AVLTree.end().当然,std::unique_ptr<T>无法复制:std::unique_ptr<T>每个指针只有一个.它不会真正复制任何东西,而是窃取它.那会很糟糕.

    您想要使用引用:

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

    ......或者,如果你不修改它们

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

    2023-02-13 18:36 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有