В моем коде у меня есть два вектора:
vector<lipid*> lipids;
vector<shared_ptr<bead> > ions;
Класс lipid
:
class lipid{
public:
lipid();
lipid(double x, double y, bool up, int LID);
~lipid();
void makeMe(int LID);
std::tr1::shared_ptr<bead> head;
std::tr1::shared_ptr<bead> body;
std::tr1::shared_ptr<bead> tail;
int LID;
vec direction;
};
И я создаю бусинки головы, тела, хвоста в конструкторе липидов.
std::tr1::shared_ptr<bead> he(new bead);
std::tr1::shared_ptr<bead> bo(new bead);
std::tr1::shared_ptr<bead> ta(new bead);
this->head = he;
this->body = bo;
this->tail = ta;
Некоторые из липидных головок вставляются в вектор ионов следующим образом:
vector<lipid*>::iterator lit = lipids.begin();
while (lit != lipids.end()){
lipid * l = *lit++;
if (l->head->charge != 0) this->ions.push_back(l->head);
}
, где charge
- целочисленное свойство bead
.
У меня также есть map<vector<int>, set<shared_ptr<bead> > >
для хранения некоторых бусин с названиями коробок. Чтобы добавить bead
в любое из значений карты, которые я использую:
bead b = l->head; //b white also be accessed through a beads vector that holds a shared pointer to all beads in the simulation
vector<int> t = b->getBox(); //a function that returns a valid box
boxes[t].insert(b);
В определенной части у меня есть набор общих указателей с именем cBeads
, и я вставляю в него бусы в две отдельные петли; первая проходит по некоторым коробкам и вставляет в набор cBeads
любой шарик, который был заменен бобом, а другая проходит по всем ионам и вставляет их.
Я знаю, что общий указатель должен быть владельцем указателя или чего-то еще, означает ли это, что я могу разместить два общих указателя, указывающих на один и тот же объект в наборе?
Надеюсь, все это имеет для вас смысл.