c++ - vector 问题的算法

标签 c++

下面提到的问题的最佳算法是什么。

实现方法 PrintFamilyTree() 打印出树的名称和世代
输出应该类似于
姓名:简 世代:0
姓名:Mike 世代:1
姓名:格雷格世代:2
姓名:卡罗尔:世代:2
姓名:彼得世代:3
姓名:玛西娅世代:3
姓名:鲍比世代:1

class Human : public std::vector<Human *>
{
public:
Human(const std::string &name) : m_Name(name) {};
virtual void PrintFamilyTree(const short &generation = 0) const;
protected:
std::string m_Name;
};

class Male: public Human
{
public:
Male(const std::string &name) : Human(name) {};
};

class Female: public Human
{
public:
Female(const std::string &name) : Human(name) {};
};

void main()
{
Male m1("Mike"), m2("Greg"), m3("Peter"), m4("Bobby");
Female f1("Carol"), f2("Marcia"), f3("Jan");

m1.push_back(&m2);
f1.push_back(&m3);
f1.push_back(&f2);
m1.push_back(&f1);
f3.push_back(&m1);
f3.push_back(&m4);

f3.PrintFamilyTree();
}

最佳答案

class Human : public std::vector<Human *>

这不是个好主意——STL 容器通常不是为派生而设计的。考虑包含而不是继承。

void main()

main 返回一个 int。总是。

这看起来是一个简单的问题。想想树状结构。您可能希望将正在使用的容器(即 vector)更改为更合适的内容。

请注意,您的问题闻起来很像家庭作业,所以几乎没有回复!

关于c++ - vector 问题的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1788357/

相关文章:

c++ - 在函数调用中定义一个匿名结构

c++ - ffmpeg 将视频解码为 YUV 和损坏的像素

c++ - C 和 C++ 之间的主要区别是什么?您什么时候会选择一个而不是另一个?

c++ - 删除对象数组

c++ - 优化 .txt 文件中的字符串搜索

c++ - 已修复尝试在反转数组时修复损坏的代码

c++ - 将 boost::fusion::for_each 应用于具有可变函数对象的 boost::fusion::vector

c++ - gcc/linux : CppuTest shows memory leak using static vectors, 误报?

c++ - 我如何提高这种随机素性测试算法的复杂性?

c++ - 调试断言失败:下标超出 std::vector 的范围