Задать вопрос
  • Вопрос про указатели. Правильно ли я понимаю?

    @dima20155
    you don't choose c++. It chooses you
    Вы немного путаетесь с указателями.
    int name1 = 42; // - локальная переменная типа int, хранится на стеке
    int* name2; // - локальная переменная типа указатель на int. Сама переменная (! не её значение) хранится на стеке. 
    int* name3 = &name1;  // - аналогично name2, Значение переменной указывает на переменную, которая хранится на стеке
    int* name4 = new int(84);  // - аналогично name3, Значение переменной указывает на переменную, которая хранится в куче.


    Аналогично и с векторами:
    vector<int> v1; // - хранит значения переменных
    vector<int*> v2; //- хранит указатели на переменные (которые не обязаны вообще быть чем-либо инициализированы, и могут находиться в любом из 4-ех типов типов памяти)
    vector<int>* v3; // - указатель на std::vector<int> (может находиться в любом типе памяти).
    vector<int*>* v4; // - комбинация v2 и v3.


    new vector<int>; Лишь выделяет память в куче и никак не связан с типами переменных. Вот пример
    int v5 = *new int(42);

    В данном случае будет выделено место в куче, затем (в общем случае) вызван конструктор. Созданная в куче переменная будет хранить 42. Затем мы создаем переменную v5 на стеке и копируем в неё (конструктор копирования в общем случае) значение переменной из кучи. Указатель же на переменную в куче будет потерян aka memory leak.
    Вот, кстати, примерчик.
    https://godbolt.org/z/eETGh3Whb

    Динамически выделить на стеке можно с помощью _malloca(size). Но, в общем, случае делать этого не стоит и это остается уделом тех, кто очень тонко хочет оптимизировать код. std::array принимает одним из параметров шаблона размер, соотвествнно в момент компиляции размер необходимого массива известен и его можно хранить на стеке (по сути это обертка над C-array, удобная и безопастная). Подозреваю, что в случае гиганских размеров std::array есть вероятность, что он может быть расположен в куче (подтверждений и опровержений этому не нашел!).

    P.S. Да, многовато вышло.
    Ответ написан
  • Вопрос про указатели. Правильно ли я понимаю?

    RabraBabr
    @RabraBabr
    У вектора из стандартной библиотеки, где бы он не был, буфер data всегда хранится в динамической памяти . SBO оптимизацию он не делает насколько я помню в отличие от бустовского. Сейчас меня поправят если я ошибся. Для размещения данных в стеке используйте std::array.
    Ответ написан
    2 комментария
  • Где взять math.h?

    Написал #include math.h

    А не пробовали, как надо писать:#include "math.h"?
    Ответ написан
    9 комментариев
  • Как реализовать проверку значений одной строки с другой (пароль с повторите паролем)?

    Psixodelik
    @Psixodelik
    Преподаватель на Hexlet


    По такому принципу можешь делать как уже угодно. Хоть по клику, хоть при вводе

    Ответ написан
    Комментировать
  • Почему не выводит alert?

    JimmiJanger
    @JimmiJanger
    Любопытный активист, под маской ленивого нуба.
    У вас переменная С во второй строчке, var с=prompt(" ...
    равна русской букве с
    Ответ написан
    1 комментарий
  • Почему не выводит alert?

    потому что у вас синтаксическая ошибка вот тут
    var с=prompt("Введите число с чтобы узнать степень b, из выражения a^b=c"); //или тут
    alert("Степень b = " + stepen(a,c));

    вообщем у тебя с - где то русская где то английская

    var a=prompt("Введите число а чтобы узнать степень b, из выражения a^b=c");
    var c=prompt("Введите число с чтобы узнать степень b, из выражения a^b=c");
    function stepen (a,c)
    {
        var n=0;
        while (c>1)
        {
            if(c%a==0)
            {
                c=c/a;
                n++;
            }
        }
       return n; 
    }
    alert("Степень b = " + stepen(a,c));

    заглядывай иногда в консоль
    Ответ написан
    Комментировать