Форум программистов, компьютерный форум CyberForum.ru

Сжать одномерный массив целых чисел - C++

Восстановить пароль Регистрация
 
Kant
 Аватар для Kant
24 / 24 / 8
Регистрация: 15.05.2013
Сообщений: 213
23.05.2014, 10:28     Сжать одномерный массив целых чисел #1
Есть одномерный массив целых чисел от 0 - 65 535. Необходимо создать класс который сожмет этот массив, но при этом будет доступно обращению по индексу для чтения и записи.

Пройтись по массиву определив сколько занимает бит каждое число, как-то выделить память под все это. И вот тут у меня куча вопросов.

1) Как создать массив бит?
Я знаю только что есть bitset для этого и битовые поля.

2) Как мне написать функцию которая запишет числа в мой массив бит?

3) Как в случае изменении числа в моем классе большим по размеру в битах чем предыдущие сдвинуть массив бит?
В моем представлении просто перезаписать заново.

Помогите пожалуйста.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2014, 10:28     Сжать одномерный массив целых чисел
Посмотрите здесь:

Сформировать одномерный массив целых чисел C++
C++ Сформировать одномерный массив целых чисел, используя датчик случайных чисел
C++ Сформировать одномерный массив целых чисел, используя датчик случайных чисел.
Сформировать одномерный массив целых чисел, используя датчик случайных чисел, и распечатать массив. Удалить из массива все элементы, совпадающие с его C++
Сформировать одномерный массив целых чисел, используя датчик случайных чисел C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
23.05.2014, 10:56     Сжать одномерный массив целых чисел #2
Цитата Сообщение от Kant Посмотреть сообщение
Как создать массив бит?
есть ещё std::vector<bool>
Цитата Сообщение от Kant Посмотреть сообщение
Есть одномерный массив целых чисел от 0 - 65 535.
Размер массива будет меняться или он постоянен?
Цитата Сообщение от Kant Посмотреть сообщение
Необходимо создать класс который сожмет этот массив, но при этом будет доступно обращению по индексу для чтения и записи.
Перегружаете operator[] и в нем реализуете логику доступа к сжатым данным.
Kant
 Аватар для Kant
24 / 24 / 8
Регистрация: 15.05.2013
Сообщений: 213
23.05.2014, 12:58  [ТС]     Сжать одномерный массив целых чисел #3
Угу, есть ещё vector<bool>.

Я хочу использовать вот такую штуку.
C++
1
2
3
4
5
6
7
8
9
10
int a = 254;
int b = 255;
 
unsigned char value;
value = a;
 
// А теперь я так понимаю необходимо сместить влево на 8 бит чтобы можно было 
// записать ещё b в value
value << 8;
// и вот здесь я хочу дописать ещё b , но не знаю как
newbie666
Заблокирован
23.05.2014, 13:03     Сжать одномерный массив целых чисел #4
для так сказать удобной работы с битами есть std::bitset
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
23.05.2014, 13:10     Сжать одномерный массив целых чисел #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Kant, что-то Вы попутали типы, при сдвиге char на 8 бит получите 0.
Если нужно в большой интегральный тип поместить несколько маленьких, то надо:
1. добавить (побитовое "или") маленькое значение в большое.
2. сдвинуть большое значение влево на кол-во бит маленького значения.
3. повторить пп 1,2 до достижения предельной разрядности.
Kant
 Аватар для Kant
24 / 24 / 8
Регистрация: 15.05.2013
Сообщений: 213
23.05.2014, 14:56  [ТС]     Сжать одномерный массив целых чисел #6
Угу, действительно попутал. Невнимательный. Сейчас попробую добавить два маленьких числа.

Моя основная цель - сжать мой массив целых чисел в диапазоне от 0 - 65 535, то есть unsigned short. И я хочу это сделать с помощью побитовых операций и unsigned char.
Это мне получается необходимо будет хранить размер смещения на каждое число и связывать его с индексом.
А если захочу изменить значение по индексу придется перевыделять память.

Хе-хе, пока все представляется очень муторно. Потом сделаю тоже самое с помощью vector<bool> и замерю скорость работы и степень сжатия.
Yandex
Объявления
23.05.2014, 14:56     Сжать одномерный массив целых чисел
Ответ Создать тему
Опции темы

Текущее время: 08:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru