Size: a a a

2021 March 03

S

Stepan in supapro.cxx
Почему?
источник

SS

Sergey Sobolev in supapro.cxx
Anatoly Shirokov
он не прошел бы кодревью
+, завернули бы сразу
источник

SS

Sergey Sobolev in supapro.cxx
Stepan
Почему?
да потому что ревьюверу придется думать, что тут написано, когда нужно думать совсем над другим
источник

S

Stepan in supapro.cxx
А над Толиным решением не придётся?
источник

SS

Sergey Sobolev in supapro.cxx
точно меньше, потому что оно одну строку занимает. Я бы в прод отправил решение с if)
источник

S

Stepan in supapro.cxx
Самое простое же выходит табличным методом по итогу?
источник

AS

Anatoly Shirokov in supapro.cxx
Stepan
Самое простое же выходит табличным методом по итогу?
да, я бы табличный пропустил
источник

d

d7d1cd in supapro.cxx
Stepan
Самое простое же выходит табличным методом по итогу?
Самое быстрое
источник

SS

Sergey Sobolev in supapro.cxx
Stepan
Самое простое же выходит табличным методом по итогу?
да, согласен, оно при этом быстрое
источник

S

Stepan in supapro.cxx
А рекурентный алгоритм бы пропустили?
источник

О

Олег in supapro.cxx
struct cluster {
   shared_ptr<cluster> left,right;
   weak_ptr<cluster> father;
};

void f(cluster& left, cluster& right) {
   right.father = left.father = make_shared<cluster>();
   right.father.lock()->left = make_shared<cluster>(left);
   //right.father.lock()->right = make_shared<cluster>(right);
}
int main() {
   cluster left;
   cluster right;
   f(left,right);
   return 0;
}
источник

О

Олег in supapro.cxx
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
источник

AS

Anatoly Shirokov in supapro.cxx
Олег
struct cluster {
   shared_ptr<cluster> left,right;
   weak_ptr<cluster> father;
};

void f(cluster& left, cluster& right) {
   right.father = left.father = make_shared<cluster>();
   right.father.lock()->left = make_shared<cluster>(left);
   //right.father.lock()->right = make_shared<cluster>(right);
}
int main() {
   cluster left;
   cluster right;
   f(left,right);
   return 0;
}
right.father = left.father = make_shared<cluster>(); // вот здесь твой shared завершил свое существование после ;
источник

О

Олег in supapro.cxx
зачем вообще lock
источник

О

Олег in supapro.cxx
auto father = make_shared<cluster>();
   right.father = left.father = father;
   father->left = make_shared<cluster>(left);
источник

K

Kirill in supapro.cxx
Олег
struct cluster {
   shared_ptr<cluster> left,right;
   weak_ptr<cluster> father;
};

void f(cluster& left, cluster& right) {
   right.father = left.father = make_shared<cluster>();
   right.father.lock()->left = make_shared<cluster>(left);
   //right.father.lock()->right = make_shared<cluster>(right);
}
int main() {
   cluster left;
   cluster right;
   f(left,right);
   return 0;
}
weak_ptr не инкрементит счётчик, объект разрушается
источник

AS

Anatoly Shirokov in supapro.cxx
Олег
зачем вообще lock
lock нужен, чтобы получить объект shared, если он есть
источник

О

Олег in supapro.cxx
Олег
auto father = make_shared<cluster>();
   right.father = left.father = father;
   father->left = make_shared<cluster>(left);
типа так работает
источник

K

Kirill in supapro.cxx
Олег
типа так работает
Потому что объекту есть где жить. В локальной переменной father. При выходе из скоупа умрёт
источник

AS

Anatoly Shirokov in supapro.cxx
Олег
типа так работает
ты похоже не просек фишку - это работает только в теле f, после выходе shared будет разрушен
источник