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

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

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

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

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

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

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

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

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

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

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

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

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

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

C++ Дан одномерный массив состоящий из целых чисел. - C++
Дан одномерный массив,состоящий из целых чисел. Найти количество элементов массива,значения которых больше заданного числа А и кратных 5....

Сформировать одномерный массив целых случайных чисел - C++
Сформировать одномерный массив целых случайных чисел. Удалить все элементы , большие данного числа x ( x ввести с клавиатуры )...

Одномерный массив. Задана последовательность целых чисел - C++
Задана последовательность целых чисел. Сформировать на основе нее массив, содержащий номера отрицательных элементов последовательности....

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

Одномерный массив. Определение количества целых чисел больше 0 - C++
Друзья, добрый вечер :) Вобщем продолжаю постепенно разбираться в С++. На этот раз мне попалась задача, в которой необходимо найти...

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

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

Как описать одномерный массив целых и действительных чисел одновременно? - C++
как описать одномерный массив целых и действительных чисел вместе???


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

Или воспользуйтесь поиском по форуму:
Kant
33 / 33 / 9
Регистрация: 15.05.2013
Сообщений: 236
23.05.2014, 14:56  [ТС]     Сжать одномерный массив целых чисел #6
Угу, действительно попутал. Невнимательный. Сейчас попробую добавить два маленьких числа.

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

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

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