Size: a a a

2021 February 24

NK

Nikolay Kononov in supapro.cxx
Liber Azerate
Да, если метод не константный
он имел ввиду константный указатель, а не указатель на константу, кажется
источник

ПК

Побитый Кирпич... in supapro.cxx
или const T* const this если const метод
источник

ID

In Dev in supapro.cxx
Danya
struct Struct {
 struct Inner {
 }
};

Как создать объект Inner?
Где подвох?
источник

SK

Stas Koynov in supapro.cxx
Побитый Кирпич
или const T* const this если const метод
спасибо добрый человек. я уж думал меня сьедят
источник

D

Danya in supapro.cxx
In Dev
Где подвох?
Если человек говорит, что :: это про пространство имён, то надо решить это без его использования
источник

D

Danya in supapro.cxx
Потому что тут нет пространств имен
источник

D

Danya in supapro.cxx
Danya
Если человек говорит, что :: это про пространство имён, то надо решить это без его использования
А без него использования это решить нельзя
источник

D

Danya in supapro.cxx
Чтд
источник

D

Danya in supapro.cxx
Danya
А без него использования это решить нельзя
* вне структур
источник

d

dmbldr in supapro.cxx
Объясните почему all_subgraphs зачищается при каждом новом входе в impl_fill?
источник

d

dmbldr in supapro.cxx
Переслано от dmbldr
Добрый день. При запуске fill_set() программа падает с interrupted by signal 11: SIGSEGV. Не могу понять, откуда здесь ошибка сегментации, с памятью напрямую не работаю. Может быть связано с тем, что all_subgraphs при каждом рекурсивном входе в impl_fill() как будто бы зачищается (все элементы исчезают, на месте нулевого лежит граф инициализированный по умолчанию). Помогите пожалуйста.
class brute_force {
public:
   explicit brute_force(graph g) : _g(std::move(g)) {};
   void fill_set();

private:
   graph _g;
   std::unordered_set<graph, graph_hash> all_subgraphs;

   void impl_fill(graph const& g);
};
void brute_force::impl_fill(graph const& g) {
   if(all_subgraphs.find(g) == all_subgraphs.end()) {
       if(g.is_reachable(_s, _d)) {
           all_subgraphs.insert(g);
           for(size_t i = 0; i < g.num_edges(); ++i) {
               graph tmp = g.erase_edge(i);
               impl_fill(tmp);
           }
       }
   }
}

void brute_force::fill_set() {
   impl_fill(_g);
}

Класс граф:
class graph {
public:
   using byte = unsigned char;
   using edge_type = std::vector<std::pair<byte, byte>>;

   graph() = default;
   graph(graph const& other) = default;
   graph(edge_type edges, byte n) : edges(std::move(edges)), n(n) {};

   bool is_reachable(byte s, byte d) const;
   graph erase_edge(size_t const& i) const;

   friend bool operator==(graph const& lhs, graph const& rhs);

   size_t num_edges() const;
private:
   edge_type edges; //список ребёр
   byte n = 0; //число вершин
};

graph graph::erase_edge(size_t const& i) const {
   graph res(*this);
   res.edges.erase(edges.begin()+i);
   return res;
}
size_t graph::num_edges() const {
   return edges.size();
}
источник

SK

Stas Koynov in supapro.cxx
Danya
struct Struct {
 struct Inner {
 }
};

Как создать объект Inner?
struct Struct::Inner in; в чем вопрос то?
мы говорим что тип Inner находится в пространстве имен структуры struct Struct
https://wandbox.org/permlink/DLNrNXIpGPQT6Mxp
источник

LA

Liber Azerate in supapro.cxx
dmbldr
Переслано от dmbldr
Добрый день. При запуске fill_set() программа падает с interrupted by signal 11: SIGSEGV. Не могу понять, откуда здесь ошибка сегментации, с памятью напрямую не работаю. Может быть связано с тем, что all_subgraphs при каждом рекурсивном входе в impl_fill() как будто бы зачищается (все элементы исчезают, на месте нулевого лежит граф инициализированный по умолчанию). Помогите пожалуйста.
class brute_force {
public:
   explicit brute_force(graph g) : _g(std::move(g)) {};
   void fill_set();

private:
   graph _g;
   std::unordered_set<graph, graph_hash> all_subgraphs;

   void impl_fill(graph const& g);
};
void brute_force::impl_fill(graph const& g) {
   if(all_subgraphs.find(g) == all_subgraphs.end()) {
       if(g.is_reachable(_s, _d)) {
           all_subgraphs.insert(g);
           for(size_t i = 0; i < g.num_edges(); ++i) {
               graph tmp = g.erase_edge(i);
               impl_fill(tmp);
           }
       }
   }
}

void brute_force::fill_set() {
   impl_fill(_g);
}

Класс граф:
class graph {
public:
   using byte = unsigned char;
   using edge_type = std::vector<std::pair<byte, byte>>;

   graph() = default;
   graph(graph const& other) = default;
   graph(edge_type edges, byte n) : edges(std::move(edges)), n(n) {};

   bool is_reachable(byte s, byte d) const;
   graph erase_edge(size_t const& i) const;

   friend bool operator==(graph const& lhs, graph const& rhs);

   size_t num_edges() const;
private:
   edge_type edges; //список ребёр
   byte n = 0; //число вершин
};

graph graph::erase_edge(size_t const& i) const {
   graph res(*this);
   res.edges.erase(edges.begin()+i);
   return res;
}
size_t graph::num_edges() const {
   return edges.size();
}
Не форвардь или залей на pastebin.com
источник

D

Danya in supapro.cxx
Что такое пространство имён структуры?
источник

ID

In Dev in supapro.cxx
Побитый Кирпич
или const T* const this если const метод
const_cast<A*>(this) = 123;
Не сработает, например, потому что this это prvalue, а не константный указатель :)
источник

ID

In Dev in supapro.cxx
Тут мне к сожалению не хватает знаний, может ли prvalue быть константным
источник

d

dmbldr in supapro.cxx
Liber Azerate
Не форвардь или залей на pastebin.com
источник

ПК

Побитый Кирпич... in supapro.cxx
In Dev
const_cast<A*>(this) = 123;
Не сработает, например, потому что this это prvalue, а не константный указатель :)
То что оно prvalue не отменяет, что у него тип "константный указатель"
источник

SK

Stas Koynov in supapro.cxx
Danya
Что такое пространство имён структуры?
давай так, я сказал что this это T* const this - константный указатель ты говоришь что я идиот. я признаю я - идиот и закроем тему. ты молодец!
ЧТД
источник

ID

In Dev in supapro.cxx
Побитый Кирпич
То что оно prvalue не отменяет, что у него тип "константный указатель"
Но ведь это уже не T* const?
источник