Composite_Pattern_2 - 8BitsCoding/RobotMentor GitHub Wiki
Geometric Shapes를 그리는데 두 가지 방법이 있다.
하나하나 그리는 방법과
그룹으로 묶어서 그리는 방법 아래를 참고하자.
#pragma once
#include <iostream>
#include <vector>
#include <memory>
struct GraphicObject
{
virtual void draw() = 0;
};
struct Circle : GraphicObject
{
void draw() override
{
std::cout << "Circle" << std::endl;
}
};
struct Group : GraphicObject
{
std::string name;
explicit Group(const std::string& name)
: name{name}
{
}
void draw() override
{
std::cout << "Group " << name.c_str() << " contains:" << std::endl;
for (auto&& o : objects)
o->draw();
}
std::vector<GraphicObject*> objects;
};
int main()
{
Group root("root");
Circle c1, c2;
root.objects.push_back(&c1);
Group subgroup("sub");
subgroup.objects.push_back(&c2);
root.objects.push_back(&subgroup);
root.draw();
}
머신러닝의 Neural Networks맞음.
#include <cstdio>
#include <vector>
#include <iostream>
#include <boost/predef/library/c.h>
#include <boost/predef/library/c.h>
#include <boost/predef/library/c.h>
#include <boost/predef/library/c.h>
using namespace std;
struct Neuron;
template <typename Self>
struct SomeNeurons
{
template <typename T> void connect_to(T& other)
{
for (Neuron& from : *static_cast<Self*>(this))
{
for (Neuron& to : other)
{
from.out.push_back(&to);
to.in.push_back(&from);
}
}
}
};
struct Neuron : SomeNeurons<Neuron>
{
vector<Neuron*> in, out;
unsigned int id;
Neuron()
{
static int id = 1;
this->id = id++;
}
/*template <typename T> void connect_to(T& other)
{
for (Neuron& target : other)
connect_to(target);
}*/
// legal in MSVC only
/*template<> void connect_to<Neuron>(Neuron& other)
{
out.push_back(&other);
other.in.push_back(this);
}*/
// connect_to(vector<Neuron>&)
Neuron* begin() { return this; }
Neuron* end() { return this + 1; }
friend ostream& operator<<(ostream& os, const Neuron& obj)
{
for (Neuron* n : obj.in)
{
os << n->id << "\t-->\t[" << obj.id << "]" << endl;
}
for (Neuron* n : obj.out)
{
os << "[" << obj.id << "]\t-->\t" << n->id << endl;
}
return os;
}
};
struct NeuronLayer : vector<Neuron>, SomeNeurons<NeuronLayer>
{
NeuronLayer(int count)
{
while (count-- > 0)
emplace_back(Neuron{});
}
friend ostream& operator<<(ostream& os, NeuronLayer& obj)
{
for (auto& n : obj) os << n;
return os;
}
};
void main()
{
Neuron n1, n2;
n1.connect_to(n2);
cout << n1 << n2 << endl;
NeuronLayer l1{5};
Neuron n3;
l1.connect_to(n3);
cout << "Neuron " << n3.id << endl << n3 << endl;
cout << "Layer " << endl << l1 << endl;
NeuronLayer l2{ 2 }, l3{ 3 };
l2.connect_to(l3);
cout << "Layer l2" << endl << l2;
cout << "Layer l3" << endl << l3;
}
데이터 값을 array에 넣어두고 관리한다.
#include "Headers.hpp"
//class Creature
//{
// int strength, agility, intelligence;
// // new property
// int charisma;
//public:
// int get_strength() const
// {
// return strength;
// }
//
// void set_strength(int strength)
// {
// Creature::strength=strength;
// }
//
// int get_agility() const
// {
// return agility;
// }
//
// void set_agility(int agility)
// {
// Creature::agility=agility;
// }
//
// int get_intelligence() const
// {
// return intelligence;
// }
//
// void set_intelligence(int intelligence)
// {
// Creature::intelligence=intelligence;
// }
//
// // sum, average, max.
//
// double sum() const {
// return strength + agility + intelligence;
// }
//
// double average() const {
// return sum() / 3.0;
// }
//
// int max() const {
// return ::max(::max(strength, agility), intelligence);
// }
//};
class Creature
{
enum Abilities { str, agl, intl, count };
array<int, count> abilities;
public:
int get_strength() const { return abilities[str]; }
void set_strength(int value) { abilities[str] = value; }
int get_agility() const { return abilities[agl]; }
void set_agility(int value) { abilities[agl] = value; }
int get_intelligence() const { return abilities[intl]; }
void set_intelligence(int value) { abilities[intl] = value; }
int sum() const {
return accumulate(abilities.begin(), abilities.end(), 0);
}
double average() const {
return sum() / (double)count;
}
int max() const {
return *max_element(abilities.begin(), abilities.end());
}
};
int main(int ac, char* av[])
{
Creature orc;
orc.set_strength(16);
orc.set_agility(11);
orc.set_intelligence(9);
cout << "The orc has an average stat of "
<< orc.average()
<< " and a maximum stat of "
<< orc.max()
<< "\n";
return 0;
}