Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Контейнер с прозрачными поддиапазонами, Готовые реализации 
:(
    Опции темы
SaDFromSpb
Дата 16.10.2008, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 5.4.2006
Где: Санкт-Петербург

Репутация: 3
Всего: 3



Требуется:
Код

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. Там можно задавать различные срезы, но при работе со срезкой всегда происходит копирование.


Это сообщение отредактировал(а) SaDFromSpb - 16.10.2008, 19:09


--------------------
"За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001)
PM   Вверх
J0ker
Дата 17.10.2008, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



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


--------------------
user posted image
PM MAIL   Вверх
maxim1000
Дата 18.10.2008, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



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

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


--------------------
qqq
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0395 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.