Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Контейнер с прозрачными поддиапазонами


Автор: SaDFromSpb 16.10.2008, 19:07
Требуется:
Код

Containter csource;
csource.resize(300);

Containter cref = csource.get_slice(10, 20); // выбираем поддиапазон с 10-го по 20 элементы.

cref[1] = 5;   // Фактически меняется 11-й элемент из csource

Container ccopy = csource.get_slice_copy(10, 20); // А здесь ccopy - уже независимый контейнер.

ccopy[1] = 5; // csource остается неизменным


Такую штуку спроектировали и написали мы с напарником. Причем реализовали не одномерные, а двухмерные массивы. Идея в том, чтобы для функций, принимающих на вход контейнер, было по-боку, работают ли они с независимым контейнером, или же с частью более большего (подматрицей в случае 2Д).
Вообще я настаивал на том, что для "ссылочного" объекта и объекта, который действительно содержит сами данные, нужно заводить разные типы, чтобы избежать путаницы, но переубедить его не удалось. 

Стоит задача обобщить это решение в виде темплэйта и запихнуть в библиотеку. Возник вопрос: Существуют ли механизмы в популярных библиотеках (в том же бусте), чтобы реализовать нечто подобное?
В std есть некоторая аналогия - valarray. Там можно задавать различные срезы, но при работе со срезкой всегда происходит копирование.

Автор: J0ker 17.10.2008, 18:11
в вашем случае возможно оптимальный вариант - данные должны существовать отдельно от контейнеров, а контейнеры должны содержать умные указатели на данные. 

Автор: maxim1000 18.10.2008, 09:57
можно попробовать выделить объект "окно" и пусть все алгоритмы уже с ним работают
а копировать только тогда, когда контейнер инициализируется окном

это получится что-то типа объединения пары итераторов vector.begin() и vector.end() (ну и любой дргуой валидной пары) в один объект

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)