gpt4 book ai didi

c++ - 如何将元素添加到指针 vector 中?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:59:36 28 4
gpt4 key购买 nike

我有这个:

std::vector <BinaryTree*> children;

哪里BinaryTree是一个类。如何向该 vector 中添加一个元素?

我试过了 children.push_back(X)其中 X是该类的一个实例,但它给了我这个错误:

cannot convert parameter 1 from 'BinaryTree' to 'BinaryTree *&&'

最佳答案

只需使用 push_back()并传递一个指针BinaryTree的实例:

std::vector <BinaryTree*> children;
BinaryTree* pTree = new BinaryTree();
children.push_back(pTree);
...
delete pTree;

为了避免手动内存管理,如果需要引用语义,使用智能指针代替原始指针:

#include <memory> // For std::shared_ptr

std::vector <std::shared_ptr<BinaryTree>> children;
std::shared_ptr<BinaryTree> pTree = std::make_shared<BinaryTree>();
children.push_back(pTree);
...
// No need to delete pTree

std::shared_ptr<>类模板是 C++11 标准库的一部分。在 C++03 中,您可以使用(几乎)等效的 boost::shared_ptr<> :

#include <boost/shared_ptr.hpp> // For std::shared_ptr

std::vector <boost::shared_ptr<BinaryTree>> children;
boost::shared_ptr<BinaryTree> pTree = boost::make_shared<BinaryTree>();
children.push_back(pTree);
...
// No need to delete pTree

最后,如果您根本不需要引用语义,而是想将二叉树视为值,您甚至可以考虑定义一个 std::vector<BinaryTree> :

std::vector<BinaryTree> children;
BinaryTree tree;
children.push_back(tree);

关于c++ - 如何将元素添加到指针 vector 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15372160/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com