gpt4 book ai didi

c++ - 如何在 vector> 中存储类对象并通过引用或值访问它们并将它们传递给函数

转载 作者:行者123 更新时间:2023-11-28 03:10:19 27 4
gpt4 key购买 nike

#ifndef BINARY_TREE_H
#define BINARY_TREE_H

#include<iostream>
#include<vector>

using namespace std;

class Binary_Tree;

static int levelCount=0;

extern vector<vector<Binary_Tree*>> vec;
extern vector<Binary_Tree*> tempVec;

class Binary_Tree
{
public:
Binary_Tree()
{
childNum=0;
data=0;
level=0;
prev=NULL;
next[0]=NULL;
next[1]=NULL;
};

Binary_Tree(int d)
{
childNum=0;
data=d;
level=0;
prev=NULL;
next[0]=NULL;
next[1]=NULL;
levelCount++;
}


void insert_node(int,int,int);

int get_level();

int get_childCount();

friend int set_childNum(Binary_Tree*);

private:
int childNum;
int data;
int level;
Binary_Tree *prev;
Binary_Tree *next[2];
};

#endif // BINARY_TREE_H

这是实现文件

#include<iostream>
#include<cmath>
#include "Binary_Tree.h"

using namespace std;



void Binary_Tree::insert_node(int lev, int d, int sib)
{
if(vec.empty())
{
cout<<"You Have to create Root first";
}

else
{
if(set_childNum(vec[lev][sib-1])==0)
{
cout<<"Child cant be created parent Node already has two childs.";
}

else
{
childNum=set_childNum(vec[lev][sib-1]);
data=d;
level=lev+1;
prev=vec[lev][sib];
next[0]=NULL;
next[1]=NULL;
tempVec.clear();
for(int i=0; i<pow(2,(lev+1)); i++)
{
if(i==childNum-1)
{
tempVec.push_back(this);
}
else
tempVec.push_back(vec[lev][i]);
}
vector<vector<Binary_Tree*>>::iterator itr=vec.begin()+(lev+1);
vec.erase(itr);
vec.insert(itr,tempVec);
}
}
}

int set_childNum(Binary_Tree *lstNdAdr)
{
if(lstNdAdr->get_childCount()==0)
return 1;

else if(lstNdAdr->get_childCount()==1)
return 2;

else
return 0;
}

int Binary_Tree::get_level()
{
return level;
}

int Binary_Tree::get_childCount()
{
if(next[0]==NULL)
{
return 0;
}

else if(next[0]!=NULL && next[1]==NULL)
{
return 1;
}

else
{
return 2;
}


}

主要.cpp

#include <iostream>
#include<cmath>
#include"Binary_Tree.h"

using namespace std;

vector<vector<Binary_Tree*>> vec;
vector<Binary_Tree*> tempVec;


int main()
{
Binary_Tree tree;
here:
cout<<"Enter your Choice:1.Create Root Of Tree\n"
<<"2.Insert node\n"<<endl;

int choice;
cin>>choice;

switch(choice)
{
case 1:
{
int d;
cout<<"Enter Data to insert: ";
cin>>d;

Binary_Tree treeDummy(d);

tree=treeDummy;

tempVec.push_back(&tree);

vec.push_back(tempVec);
}

break;

case 2:
{
int lev;
int sibbling;
int d;
cout<<"Enter at which level and data and parent's sibling-no.: ";
cin>>lev;
cin>>d;
cin>>sibbling;

if(sibbling>pow(2,lev))
cout<<"Illegal Sibbling Number."<<endl;
else
tree.insert_node(lev,d,sibbling);

}
break;
}
int x;
cin>>x;
if(x==5)
{
cout<<endl<<endl;
goto here;

}

return 0;
}

在上面的代码中,我试图创建一个二叉树类型的结构,它可以动态地操作和遍历,任何节点都可以在运行时插入和删除(尽管它不完整,因为我遇到了一个问题)。在推回 tempVec vector 时,代码会产生段错误,我也怀疑将存储在 vetcor> vec 中的对象传递给实现中的函数(我是 STL 的新手,第一次处理包含指向类类型的指针的 vector 的 vector )

最佳答案

仅当 i 设置为 1 时才填充嵌套 vector 的条目。但是您尝试访问其元素 [0][0] 无论如何。当 i 不是 1 时,您有越界访问权限。

关于c++ - 如何在 vector<vector<class *>> 中存储类对象并通过引用或值访问它们并将它们传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18667774/

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