Подведи собственные итоги года совместно с YOUGAME и забери ценные призы! Перейти

Создание строки в стеке

  • Автор темы Автор темы Vine
  • Дата начала Дата начала
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
30 Янв 2018
Сообщения
79
Реакции
6
Здравствуйте!
Решил для учебных целей, для себя, создать аналог класса string из библиотеки STL.
Решение одной проблемы я не смог найти нигде. В гугле информации нет, даже приблизительной.
Оригинальная библиотека string при инициализации кладет строку в стек, и только после, если строка редактируется, класс string выделяет для строки память в куче.
Хочу понять, как можно при инициализации моего класса тоже сперва класть строку в стек, а не сразу выделять память в куче.
Надеюсь, кто нибудь, да знает ответ.
Спасибо!
 
Ну, во-первых, тебе не обязательно класть строку в обычный стек. Можно сделать свой стек в виде чарового массива на какое-то кол-во байт в классе, потом в конструкторе уже чекать размерность инициализируемой строки, и, если что, выделять в куче память.
Когда-то делал реализацию своих строк, было что-то наподобие этого:

C++:
Expand Collapse Copy
struct LinkedList;

class fstring
{
private:
    unsigned char data[512];
    int data_count, chunks_amount;

    LinkedList *first_chunk;
   
public:
    void push(void *dt, size_t size);
    void pop(void *dt, size_t size);
    fstring(const char *str) : data_count(0), chunks_amount(0)
    {
        if(strlen(str) < 512)
            /* копируем строку в "стек", увеличиваю data_count*/
        else
            /*копируем первые 512 символов строки,
            выделяем нужное количество чанков под
            оставшиеся данные (first_chunk = new LinkedList[CalcSize(str)]) и копируем их туда*/
    }
};

Сначала пишу в данные класса, а после, если не хватает места, выделяю чанки и записываю в них
 
Ну, во-первых, тебе не обязательно класть строку в обычный стек. Можно сделать свой стек в виде чарового массива на какое-то кол-во байт в классе, потом в конструкторе уже чекать размерность инициализируемой строки, и, если что, выделять в куче память.
Когда-то делал реализацию своих строк, было что-то наподобие этого:

C++:
Expand Collapse Copy
struct LinkedList;

class fstring
{
private:
    unsigned char data[512];
    int data_count, chunks_amount;

    LinkedList *first_chunk;
  
public:
    void push(void *dt, size_t size);
    void pop(void *dt, size_t size);
    fstring(const char *str) : data_count(0), chunks_amount(0)
    {
        if(strlen(str) < 512)
            /* копируем строку в "стек", увеличиваю data_count*/
        else
            /*копируем первые 512 символов строки,
            выделяем нужное количество чанков под
            оставшиеся данные (first_chunk = new LinkedList[CalcSize(str)]) и копируем их туда*/
    }
};

Сначала пишу в данные класса, а после, если не хватает места, выделяю чанки и записываю в них
Большое спасибо! Я реализовал то, что я хотел.
 
Назад
Сверху Снизу