Задать вопрос
  • Почему в данном случае не работает обращение к элементам массива по индексу?

    wataru
    @wataru
    Mors Clamor, Да, естественно, единственный способ с этим работать в паскале - это указатели. Но в си, повторюсь, разницы с массивами нет, поэтому оно там вполне работает и через table[i]
    Написано
  • Почему в данном случае не работает обращение к элементам массива по индексу?

    wataru
    @wataru
    Mors Clamor, Потому что так в winapi сделано. Потому что оно разработано для си - а там массивы это указатели и размер вообще никак к нему не привязан. Поэтому в си нет проверки на выход за границы массива и программисты как-то сами должны длину массива отдельно протаскивать.

    В pascal по другому - там у всех массивов или длина известна во время компиляции и она проверяется при каждом обращении, или это массивы переменной длины и там длина где-то внутри массива хранится. Второе нельзя тут использовать, потому что массив-то сишный, длины в нем нет. Для первого надо какую-то длину взять.

    Вообще, большинство таких win32 api не используют массивы, а там тупо указатель и количество записей, чтоб таких проблем не было. Это апи, видимо, идет еще с самих древних времен, поэтому оно криво задизайнено.
    Написано
  • Как получить нужное значение на разных версиях виндовс?

    wataru
    @wataru Куратор тега C++
    humanabout, В с++ так-то нет рефлексии*. Единственные способы в рантайме выбрать какие-то разные данные это через control flow: if/else, switch/case или подобным образом выбрать одно из зашитых значений.
    Можно упростить код используя трюки с константыми массивами, как я сказал, что будет похоже на ваш код и вполне читаемо.

    Выбрать одну из даже статичных структур по имени никак не получится во время рантайма.

    *В новых стандартах что-то из рефлексии вроде даже пытаюстя протащить, но я не уверен, что оно вам поможет.
    Написано
  • Как исправить ошибку "выражение должно иметь константное значение"?

    wataru
    @wataru Куратор тега C++
    1) Код оберните в тег code, иначе вопрос удалят.
    2) Где происходит ошибка? приведите полный вывод компилятора, он там говорит про строчку, приводит кусок кода и иногда даже подсказывает что и как исправить.
    Написано
  • Как релизовать A* на three.js?

    wataru
    @wataru Куратор тега Алгоритмы
    Многое зависит от деталей. У вас поле разделено на клеточки или более менее непрерывное? Какой формы могут быть препятствия? Скорость хотьбы постоянная везде?
    Написано
  • Где ошибка в коде?

    wataru
    @wataru
    Оберните код в тег code. Иначе вопрос удалят
    Написано
  • Есть ли у этой задачи название?

    wataru
    @wataru Куратор тега Алгоритмы
    floppa322, Да, скорее всего. ЛП будет эффективнее. SAT у вас будет экспоненциальное количество условий.
    Написано
  • Как нагрузить расчёт в однопоточной программе C++ до 90-100% на используемом ядре?

    wataru
    @wataru Куратор тега C++
    Alex XYZ, А питон там откуда? Судя по всему у вас все тормозит из-за накладных расходов на старт потоков. Возможно это кривая реализация интерфейса между питоном и Си. В результате чего каждый вызов сишного кода из питона создает новый поток для выполнения очень простой и короткой операции. Возможно быстрее этот интерфейс сделать никак и нельзя, я тут не специалист.

    Если вы действительно используете сишный код из питона, то вам надо засунуть в Си почти всю логику, чтобы было мало вызовов из питона и они работали долго. Если выдавать сишному коду по чуть-чуть работы (например, сложить 2 числа), то это будет дико тормозить.
    Написано
  • Как нагрузить расчёт в однопоточной программе C++ до 90-100% на используемом ядре?

    wataru
    @wataru Куратор тега C++
    Alex XYZ, RtlUserThreadStart происходит один раз при запуске потока. Или у вас программа очень быстро отрабатывает и накладные расходы на ее старт вы тут и видите, перевешивающие все остальное, или ваша программа запускает очень много потоков. Возможно, это делает какая-то библиотека. Возможно она криво реализована и поддерживает распаралеливание, но вы попросили работать в один поток.
    Написано
  • Как нагрузить расчёт в однопоточной программе C++ до 90-100% на используемом ядре?

    wataru
    @wataru Куратор тега C++
    Alex XYZ, Вы где эти 10-15% видите вообще? Как вы это намеряли?
    Написано
  • Моя ошибка или ошибка системы?

    wataru
    @wataru
    Алескей Дворяшин, это-то я понял. Эта буковка в задании только один единственный раз на скриншоте встречается? Как она с ai вообще связанна?
    Написано
  • Моя ошибка или ошибка системы?

    wataru
    @wataru
    Что за мю? Про нее что-то в условии должно быть сказано. Как она с элементарными исходами связана-то?
    Написано
  • Где искать теорию для спортивного программирования?

    wataru
    @wataru Куратор тега C++
    Василий Банников, В редких случаях - не уложится. Т.е. конечно, есть идеальное решение, которое пройдет на любом языке, но на С++ можно немного меньше запариваться микрооптимизациями (битовое сжатие, развороты циклов и вот это вот все).
    Написано
  • Где искать теорию для спортивного программирования?

    wataru
    @wataru Куратор тега C++
    Василий Банников,
    C++ не очень хорошо на олимпиадах идёт из-за своего страшного синтаксиса и бедноватой стандартной библиотеки.


    Наоборот, С++ один из самых популярных языков на соревнованиях. потому что быстр. И алгоритмы на нем писать нормально. Ничего для них синтаксис не беден. А стандартная библиотека во многих языках примерно одинаково помогает в задачах. Самые стандартные структуры данных там есть почти везде, но часто надо что-то более заковыристое и все равно писать руками приходится всякие деревья и прочие извращения. Единственное, чего в C++ действительно нет - это длинная арифметика. Поэтому я в свое время на соревнованиях писал на С++ и редко на java, когда BigInt был нужен.
    Написано
  • C++ std::cout не выводит ничего?

    wataru
    @wataru Куратор тега C++
    Alex XYZ, Возможно где-то cout как-то специально выключается или перенаправляется в библиотеке.

    Например через rdbuf.

    Эти изменения не затронут printf.
    Написано
  • C++ std::cout не выводит ничего?

    wataru
    @wataru Куратор тега C++
    Alex XYZ, Я имел ввиду, что отключаются целые части кода. Например, в вашем конкретном коде verbose может быть выключено через define.
    Написано
  • Доработка алгоритмической задачи JAVA. Требуется помощь >?

    wataru
    @wataru Куратор тега Алгоритмы
    Почти, только так у вас перебираются только варианты, где левый кусок коррче правого. Но ведь может же быть и наоборот. Можно повторить ваш алгоритм, но брать только те правые границы, где будет выполняться <=. Или просто перебрать все пары исчитать разность позиций * минимум из двух длин. Это будет точно такое же квадратичное решение.
    Написано
  • Что значит такое объявления полей в С++?

    wataru
    @wataru Куратор тега C++
    alex_ak1, Почитайте про ссылки в C++. Чаще в коде они встречаюстя как локальные переменные для сокращения кода, чтобы не писать длинные конструкции:
    int &item = container[index].something.property;
    item.x = 10;
    item.y = 12


    Еще иногда ссылки возваращают из методов, чтобы менять внутренние поля. Вот такого использования, как вы привели, я раньше тоже не видел. Но тут нет ничего сверхъестественного.

    Еще раз, ссылка - это как псевдоним для переменной. Это как указатель, но его не надо разыменовывать.

    Ссылки можно использовать и в классах. Там же можно использовать указатели? Вот ссылки там тоже можно использовать. Инициализация в объявлении используется повсеместно:
    class Foo() {
    public:
    ...
    private:
    int count_ = 10;
    int doulbe_count_ = count_*2;

    Это полностью эквивалентно:
    class Foo() {
    public:
      Foo() : count_(10), double_count(2*count_) {}
    }


    Ну вот у вас не int переменная, а ссылка. Использовать другие поля в инициализации можно. Надо только учитывать порядок инициализации и не использовать что-то еще не инициализированное.

    Видели же как константы объявляются через друг друга?
    const int kMaxBitrate = 100000;
    const int kMaxTime = 10;
    const int kMaxData = kMaxBitrate * kTime;


    Вот так же можно использовать в инициализации любых переменных любые другие.
    Написано
  • Что значит такое объявления полей в С++?

    wataru
    @wataru Куратор тега C++
    alex_ak1, в смысле, новый синтаксис? Ссылки всегда так заводились. И так же инициализация в объявлении в классе тоже была всегда. Опять же, воспринимайте это как присваивание указателю адреса переменной. Только синтаксический сахар это скрывает, нет операции взятия адреса и разыменовывания указателя при работе со ссылками.

    Да, странно использовать поле класса в инициализации его же, но ничего не запрещает это делать.
    Написано