Готовая реализация понятия бесконечного вектора на С++
От: baf  
Дата: 30.05.11 16:25
Оценка:
Пишу программу на С++ для научной статьи и хочу уменьшить в ней количество "велосипедов", чтобы уменьшить листинг.
Прошу совета по представлению понятия бесконечного вектора.

Нужно хранить блоки бесконечных векторов. Таких блоков много, и после того как блок просчитан он больше не изменятся. Новый блок просчитывается используя некоторое подмножество предыдущих блоков.
В блоке вектора с разным количеством значащих элементов (т.е. не нулевых элементов, за которыми предполагается бесконечное число нулевых);

Я планировал реализовать блок как vector<vector<unsigned short> >, и написать адаптер для итератора по вектору, который бы проверял позицию, и находясь за концом контейнера возвращал указатель на 0.
М.б. есть способ "малой кровью" вывести такой итераотр из средств STL.
Наверное легко можно получить такой итератор средствами Boost, но Boost я начал использовать недавно, поэтому как это сделать не знаю :(

В принципе, такое решение удовлетворительно, но полагаю vector<vector<>> неэффективно расходует память, помимо этого возможно тратиться существенное время на её выделение. Поэтому также интересует эффективный контейнер для таких векторов.

Меня бы вполне устроило такое решение:
Контейнер из хорошой библиотеки, который разом резервирует память (в случае vector<vector<>> приходиться запрашивать память для каждого вектора в коллекции), последовательно записывает в неё значащие элементы векторов, запоминая "бегин" и "енд" каждого вектора. Т.о. память выделяется сразу на все векторы, и векторы храняться компактно друг за другом, помимо этого есть итераторы для каждой строки, которые можно преобразовать в итераторы по бесконечным векторам с помощью некоторого адаптера их хорошей библиотеки, и передать в обрабатывающие алгоритмы. Также можно обратиться к любому блоку по номеру, например взяв его оператором[] из vector<(Контейнер из хорошой библиотеки)*>. М.б. есть что-нибудь для моих нужд в boost::numeric::ublas или MTL, но их я тоже не курил, а статью нужно скоро сдавать :(((

Буду признателен за ваши советы!
итераторы адаптеры boost mtl stl
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.