a -> b -> c -> d -> e -> f -> g
У меня в каждом узле вместо адреса следующего узла- вектор узлов с одним элементом. То есть сам узел вот такая структура:
Код: Выделить всё
struct uzel
{
string date;
vector <uzel> vuzel;
};
Код: Выделить всё
struct uzel a;
a.date = "aa";
struct uzel b;
b.date = "bb";
struct uzel c;
c.date = "cc";
struct uzel d;
d.date = "dd";
struct uzel e;
e.date = "ee";
struct uzel f;
f.date = "ff";
struct uzel g;
g.date = "gg";
Код: Выделить всё
f.vuzel.push_back (g);
e.vuzel.push_back (f);
d.vuzel.push_back (e);
c.vuzel.push_back (d);
b.vuzel.push_back (c);
a.vuzel.push_back (b);
Так, дальше. Задача- удалить из этой вот цепочки
a -> b -> c -> d -> e -> f -> g
Узлы, начиная, c узла d включительно. То есть чтобы этого остатка d -> e -> f -> g больше не было (и он не занимал память!) а осталось только a -> b -> c. Коль скоро имеем дело с векторами, то правильно будет нужные вектора обнулить. Ниже объяснение.
Код: Выделить всё
//если сделать так, то в цепочке останется останется только a
//a.vuzel.resize(0);
//если сделать так, то в цепочке останется останется только ab
//a.vuzel[0].vuzel.resize(0);
//если сделать так, то в цепочке останется останется только abc
a.vuzel[0].vuzel[0].vuzel.resize(0);
Вот полностью код, компилить g++ foo.cpp
Код: Выделить всё
/*foo.cpp*/
#include <string>
#include <vector>
using namespace std;
struct uzel
{
string date;
vector <uzel> vuzel;
};
int main ()
{
struct uzel a;
a.date = "aa";
struct uzel b;
b.date = "bb";
struct uzel c;
c.date = "cc";
struct uzel d;
d.date = "dd";
struct uzel e;
e.date = "ee";
struct uzel f;
f.date = "ff";
struct uzel g;
g.date = "gg";
////////////////////////////////////////////////////////////////////
f.vuzel.push_back (g);
e.vuzel.push_back (f);
d.vuzel.push_back (e);
c.vuzel.push_back (d);
b.vuzel.push_back (c);
a.vuzel.push_back (b);
//останется только abc
a.vuzel[0].vuzel[0].vuzel.resize(0);
return 0;
}