Буфер данных
условия таковы:
=данные распологаються в оп сплошным блоком
=данные добавляються в конец блока
Тоесть списки не подходят.
условия таковы:
=данные распологаються в оп сплошным блоком
=данные добавляються в конец блока
Тоесть списки не подходят.
Массив. Резервирования места заранее больше, чем нужно - когда резерв кончается создаем новый побольше и копируем туда старый.
Но придется зарезервировать память (reserve), чтобы вектор не переместился в другую область памяти при изменении размера. Ну, в общем, это то, что сказал GreenRiver, но уже реализованное. Поправка: новый резерв создать нельзя - надо сразу резервировать максимальную память, которая может понадобится.
А как тогда сформировать указатель на конец 1 массива (данные добовляються оч часто), если места еще хватает, чтобы добавить данные.
C STL не знаком :o
+ учтите, что то что выше написал Kogrom, относится к языку C++ (STL - это библиотека для C++).
Смысл вопроса как-то неясен... Под "указателем" (на всякий случай хочу уточнить, а то мало ли) вы здесь имеете в виду то же, что называется указателем в C/C++? Если да - то какой указатель вы хотите получить ("сформировать") - указатель на конец всего массива, или указатель на текущую позицию в массиве, на которую можно записать очередную добавляемую в буфер переменную (int, char или что там еще вы собираетесь хранить в вашем буфере), когда массив еще не полон?
Да.
Хотелось бы - указатель на текущую позицию в массиве, на которую можно записать очередную добавляемую в буфер переменную.
...
Хотелось бы - указатель на текущую позицию в массиве, на которую можно записать очередную добавляемую в буфер переменную.
Тогда алгоритм действий примерно такой:
Создаете массив нужного вам типа (int, char или какой-то другой), такого размера чтобы заведомо хватило;
Создаете указатель на переменную того же типа, что и массив, и приравниваете его адресу начала массива. Этот указатель и будет использоваться в качестве указателя на текущую позицию в массиве;
Далее, после добавления в буфер очередной переменной, смещаете указатель на 1 позицию вверх, но при этом надо проверять, что указатель не вышел за конец массива.
Т.е. что-то наподобие такого:
int buf[1000];
int * bufPtr = buf;
...
//пример добавления одной переменной в буфер (но без проверки на выход за конец массива):
int n = 100;
*bufPtr = n; //запись переменной в буфер
++bufPtr; //смещение указателя на одну позицию вверх
Но хочу заметить, что массив для создания буфера можно использовать только при условии, что буфер не может быть очень большим. Если буфер может быть большим, то массив использовать нельзя, т.к. он в памяти компьютера создается на стеке (Stack), а размер стека ограничен. Если нужен большой буфер, то память надо выделять из кучи (Heap) - оператор new.
И еще один вопрос:
данные будут добавляться по несколько килобайт.Как можно измеенить указатель(если можно) bufPtr на какое либо число байт без оп.++ в цикле?
данные будут добавляться по несколько килобайт.Как можно измеенить указатель(если можно) bufPtr на какое либо число байт без оп.++ в цикле?
Можно с помощью операторов "+" или "+=":
// можно так:
bufPtr = bufPtr + 1000;
// или так:
bufPtr += 1000;
// результат любого из этих вариантов - такой же, как после 1000-кратного выполнения ++bufPtr
Аналогично - можно смещать указатель вниз - с помощью "-" и "-=" (и оператор -- тоже работает).
P.S. А вообще - советую почитать в учебнике по C/C++ про указатели и что с ними можно делать, и при их связь с массивами.
А что именно вы пытаетесь сделать? Задавать смещение (на какое количество позиций будет смещаться указатель) не числом, а целочисленной переменной, и потом складывать?
Вот так:
bufPtr += ptrShift; // эквивалентно bufPtr += 1000;
у меня все работает.
Или вы как-то по-другому делаете?