Andrey
Анатолий же вон выше кинул уже
Anatoly
pdf поудобочитаемей будет
Berkus
там хренового качества пдф если я правильно помню
Berkus
рекомендую бумажную версию, она довольно неплохая)
pavel
struct Cust { int x = 0; }; int main() { Cust a = {0}; return 0; } >>>> g++ -std=c++11 Почему оно собирается только если выкинуть = 0 из структуры?
Anonymous
электронные книги на комп, эт вообще очень странно, особо нет нормальных приложений для чтения, был акробат (из тех что знаю) и xodo, остановился на 2
Anonymous
pdf поудобочитаемей будет
Anonymous
про djvu, вообще не понял прикола
Дмитрий ⬡
struct Cust { int x = 0; }; int main() { Cust a = {0}; return 0; } >>>> g++ -std=c++11 Почему оно собирается только если выкинуть = 0 из структуры?
Потому что ты пользуешь инициализацией всех полей руками, это работает только у POD, а ты неявно написал конструктор.
pavel
Потому что ты пользуешь инициализацией всех полей руками, это работает только у POD, а ты неявно написал конструктор.
Я понимаю что я руками написал конструктор, но почему именно такой конструктор сделал структуру уже не POD?
pavel
Нет ничего не POD-ного, никаких там выделений памяти и прочего херобаза.
Дмитрий ⬡
Я понимаю что я руками написал конструктор, но почему именно такой конструктор сделал структуру уже не POD?
Я бы сказал, что в общем случае это очень плохой стиль, нарушающий инкапсуляцию
Anonymous
а оно по стандарту разве не должно быть равно 0?
Anonymous
struct Cust { int x = 0; }; int main() { Cust a = {0}; return 0; } >>>> g++ -std=c++11 Почему оно собирается только если выкинуть = 0 из структуры?
Дмитрий ⬡
На стиль пока похрен, интересует принцип.
Не обязано) Ну ок, в конструкторе есть логика у тебя. Тогда или надо вводить понятие "конструкторы есть, но они тупые, поэтому писать инициализацию руками всё ещё можно", или сказать "раз ты пишешь хоть какой-то позаботься о том, что твоя логика соблюдается"
Латентный Бурят
а оно по стандарту разве не должно быть равно 0?
Используйте, пожалуйста, Replay заместо Forward, читать удобнее.
pavel
Нет, по стандарту быть 0 оно не обязано.
pavel
Непонятно почему = 0 считается таким сложным конструктором, который прямо таки отменяет POD-ность структуры.
Латентный Бурят
так?
Ага. Если на телефоне, то можно свайп влево сообщения заместо тапа.
Anonymous
Непонятно почему = 0 считается таким сложным конструктором, который прямо таки отменяет POD-ность структуры.
Это очень странное решение, но несколько раз оно мне помогло, сейчас может не помочь, скорее всего не поможет, ибо это одно и тоже, попробуй int x(0);
Anonymous
Какое "это"?
я написал дальше в сообщении
Anonymous
нууу, почему бы и нет.)
Igor
рекомендую бумажную версию, она довольно неплохая)
не рекомендую бумажную версию, летом выйдет второе издание
Aliaksei
struct Cust { int x = 0; }; int main() { Cust a = {0}; return 0; } >>>> g++ -std=c++11 Почему оно собирается только если выкинуть = 0 из структуры?
Это исправили в С++14, будет собираться. В C++11 aggregate initialization для классов с default member initializers запрещена: http://en.cppreference.com/w/cpp/language/aggregate_initialization.
Anonymous
я все время думал, что у тебя меркель на аве.)
Anonymous
.)
Латентный Бурят
Латентный Бурят
struct Cust { int x = 0; }; int main() { Cust a = {0}; return 0; } >>>> g++ -std=c++11 Почему оно собирается только если выкинуть = 0 из структуры?
Как уже подметил @levlam — это исправили в C++14 (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3922.html), но если нет возможности перейти на C++14, то создайте конструктор, который будет принимать initializer_list.
Aidar
на цппреф ничего противоречещего не нашел
Латентный Бурят
этот пейпер тут причем?
Притом, что там "New Rules for auto deduction from braced-init-list". Я просто для информации приложил, не более.
Латентный Бурят
Где "там"?
Anonymous
note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'int' to 'const Cust' for 1st argument это clang
Латентный Бурят
там ваще нет авто
Первая ссылка в гугле. https://stackoverflow.com/questions/4118025/brace-enclosed-initializer-list-constructor
Aidar
это агрегатная инициализация
Aidar
а тут явно написано no default member initializers на cppref
Aidar
до c++14
pavel
тут
Чё "тут"? Бугага
Латентный Бурят
это агрегатная инициализация
Которая не может завершиться удачно из-за того, что list-initialization не может вызвать обычный конструктор вместо конструктора, который принимает initializer_list, так?
Berkus
Igor
эт хорошо, а там обновят хотя бы на с++11?
Он ее вроде основательно переписал, так что она даже в двухтомник превратилась :) Несколько раз уже откладывали, но надеюсь к CppConу ее наконец выпустят https://www.amazon.com/Large-Scale-Architecture-Addison-Wesley-Professional-Computing/dp/0201717069/
Berkus
а вторую часть даже не анонсировали еще?
Igor
Похоже что нет. Из удивительного - анонсировали книжку Sean Parent, которая должна выйти к концу года - http://catalogue.pearsoned.co.uk/educator/product/Better-Code-Goals-for-Software-Developers/9780134584461.page
Александр
а оно по стандарту разве не должно быть равно 0?
Для людей, которые форвардят вместо реплая, есть отдельный котел в аду
pavel
У вконтактика вступительная задачка при подаче на вакуху: Вашей программе в качестве аргумента будет передано имя файла, в котором будет находиться множество строк (ASCII символы с кодами от 32 до 127). Далее Ваша программа должна считывать строки из stdin, пока не придет строка "exit". После каждой считанной строки Ваша программа должна выводить в stdout строку "YES" или "NO" в зависимости от того, встречается данная строка в переданном файле или нет. Размер файла со словарем не превосходит 128мб. У меня 3 варианта: 1) Загнать все строки в память в плоский массив, рядом создать массив указателей на эти строки, отсортировать массив указателей по возрастанию строк и искать бинарным поиском, O(log n) 2) Загнать все строки в память в плоский массив, напихать этих строк в хеш-таблицу (физически напихать указателей на эти строки в хеш-таблицу), искать за O(1) 3) Захерачить все строки в ахо-корасика, искать за O(1), но память раздует из-за построения графа. Ещё варианты?
Evgenii
У вконтактика вступительная задачка при подаче на вакуху: Вашей программе в качестве аргумента будет передано имя файла, в котором будет находиться множество строк (ASCII символы с кодами от 32 до 127). Далее Ваша программа должна считывать строки из stdin, пока не придет строка "exit". После каждой считанной строки Ваша программа должна выводить в stdout строку "YES" или "NO" в зависимости от того, встречается данная строка в переданном файле или нет. Размер файла со словарем не превосходит 128мб. У меня 3 варианта: 1) Загнать все строки в память в плоский массив, рядом создать массив указателей на эти строки, отсортировать массив указателей по возрастанию строк и искать бинарным поиском, O(log n) 2) Загнать все строки в память в плоский массив, напихать этих строк в хеш-таблицу (физически напихать указателей на эти строки в хеш-таблицу), искать за O(1) 3) Захерачить все строки в ахо-корасика, искать за O(1), но память раздует из-за построения графа. Ещё варианты?
set? или просто онлайн проверять?
pavel
set? или просто онлайн проверять?
Там похоже требование - без C++ писать на голимых сях. Сомнительно удовольствие конечно хеш-табицу херачить на сях.
Anatoly
У вконтактика вступительная задачка при подаче на вакуху: Вашей программе в качестве аргумента будет передано имя файла, в котором будет находиться множество строк (ASCII символы с кодами от 32 до 127). Далее Ваша программа должна считывать строки из stdin, пока не придет строка "exit". После каждой считанной строки Ваша программа должна выводить в stdout строку "YES" или "NO" в зависимости от того, встречается данная строка в переданном файле или нет. Размер файла со словарем не превосходит 128мб. У меня 3 варианта: 1) Загнать все строки в память в плоский массив, рядом создать массив указателей на эти строки, отсортировать массив указателей по возрастанию строк и искать бинарным поиском, O(log n) 2) Загнать все строки в память в плоский массив, напихать этих строк в хеш-таблицу (физически напихать указателей на эти строки в хеш-таблицу), искать за O(1) 3) Захерачить все строки в ахо-корасика, искать за O(1), но память раздует из-за построения графа. Ещё варианты?
https://brestprog.neocities.org/lections/trie.html
Ignat
щас бы БОР построить
Ignat
на 128 метрах текста
pavel
Ну Trie это почти ахо-корасик и есть... По смыслу. Такой же конечный автомат. Тот кто выбирает trie, почему против хеш-таблицы?
Evgenii
на рандомном тексте произвольной длины не уверен что лучшая идея
Anatoly
на рандомном тексте произвольной длины не уверен что лучшая идея
для определения факта принадлежности слова к словарю в самый раз
Evgenii
для определения факта принадлежности слова к словарю в самый раз
там может быть например ключ в 10 букв и 100 слов по метру
Evgenii
почему бы просто на ходу не сверять и вообще не хранить ничего
Evgenii
а упс
Evgenii
неправильно прочитал
Pavel
Там ограничения по памяти еще не было?
Anatoly
Там ограничения по памяти еще не было?
нет, словарь не более 128 метров
pavel
ТАк чо, какие аргументы в пользу trie против std::unordered_set например?
Anatoly
ТАк чо, какие аргументы в пользу trie против std::unordered_set например?
и тот и другой вариант приемлем, только trie более стабилен, поскольку не зависит от природы слов в словаре
Anatoly
для хеш таблицы на определенный наборах ты банально можешь получать больше коллизий
Anatoly
ну, банальный пример: size_t degraded_hash_function(char const*) {return 1;} какую сложность ты получишь?
pavel
Получу O(n), да.
Anatoly
ну вот остюда trie более стабилен в плане независимости сложности от природы данных и равен O(l), l длина слова