Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Kant
33 / 33 / 9
Регистрация: 15.05.2013
Сообщений: 236
#1

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

23.05.2014, 10:28. Просмотров 290. Ответов 5
Метки нет (Все метки)

Есть одномерный массив целых чисел от 0 - 65 535. Необходимо создать класс который сожмет этот массив, но при этом будет доступно обращению по индексу для чтения и записи.

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

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

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

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

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

Преобразовать одномерный массив вещественных случайных чисел в массив целых чисел - C++
Преобразовать одномерный массив вещественных случайных чисел в массив целых чисел больших исходных на два порядка. Напечатать массивы в два...

Сформировать одномерный массив целых чисел, используя датчик случайных чисел - C++
Удалить элементы кратные 7. Добавить после каждого нечетного элемента массива элемент со значением 0.

Сформировать одномерный массив целых чисел, используя датчик случайных чисел - C++
1)Сформировать одномерный массив целых чисел, используя датчик случайных чисел. 2)Распечатать полученный массив. 3)Перевернуть массив...

Сформировать одномерный массив целых чисел, используя датчик случайных чисел - C++
1) Сформировать одномерный массив целых чисел, используя датчик случайных чи-сел. 2) Распечатать полученный массив. 3) Удалить элементы...

Сформировать одномерный массив целых чисел, используя датчик случайных чисел - C++
Условие такое 1.Сформировать одномерный массив целых чисел, используя датчик случайных чисел. Распечатать полученный массив. ...

Сформировать одномерный массив целых чисел, используя датчик случайных чисел. - C++
Сформировать одномерный массив целых чисел, используя датчик случайных чисел. Удалить 5 последних элементов массива. Добавить в...

5
Tulosba
:)
Эксперт С++
4619 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.05.2014, 10:56 #2
Цитата Сообщение от Kant Посмотреть сообщение
Как создать массив бит?
есть ещё std::vector<bool>
Цитата Сообщение от Kant Посмотреть сообщение
Есть одномерный массив целых чисел от 0 - 65 535.
Размер массива будет меняться или он постоянен?
Цитата Сообщение от Kant Посмотреть сообщение
Необходимо создать класс который сожмет этот массив, но при этом будет доступно обращению по индексу для чтения и записи.
Перегружаете operator[] и в нем реализуете логику доступа к сжатым данным.
0
Kant
33 / 33 / 9
Регистрация: 15.05.2013
Сообщений: 236
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 , но не знаю как
0
newbie666
Заблокирован
23.05.2014, 13:03 #4
для так сказать удобной работы с битами есть std::bitset
0
Tulosba
:)
Эксперт С++
4619 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.05.2014, 13:10 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Kant, что-то Вы попутали типы, при сдвиге char на 8 бит получите 0.
Если нужно в большой интегральный тип поместить несколько маленьких, то надо:
1. добавить (побитовое "или") маленькое значение в большое.
2. сдвинуть большое значение влево на кол-во бит маленького значения.
3. повторить пп 1,2 до достижения предельной разрядности.
1
Kant
33 / 33 / 9
Регистрация: 15.05.2013
Сообщений: 236
23.05.2014, 14:56  [ТС] #6
Угу, действительно попутал. Невнимательный. Сейчас попробую добавить два маленьких числа.

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

Хе-хе, пока все представляется очень муторно. Потом сделаю тоже самое с помощью vector<bool> и замерю скорость работы и степень сжатия.
0
23.05.2014, 14:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2014, 14:56
Привет! Вот еще темы с ответами:

Сформировать одномерный массив целых чисел, используя датчик случайных чисел - C++
Сформировать одномерный массив целых чисел, используя датчик случайных чисел.Распечатать полученный массив. Удалить 5 первых элементов...

Сформировать одномерный массив целых чисел - C++
1) Сформировать одномерный массив целых чисел, используя датчик случайных чисел. 2) Распечатать полученный массив. 3) Удалить...

Сформировать одномерный массив целых чисел. - C++
Мужики помогите, на экзамен задали , не знаю как делать, не получается(! вот задание: Сформировать одномерный массив целых...

Одномерный массив и нахождение целых чисел. - C++
Добрый день. Требуется написать программу на С, которая подсчитывает количество целых чисел в последовательности аааа и попутно присваивает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru