У меня есть универсальный табличный класс, реализованный на C ++, который использует shared_ptr< ptr_vector< vector<T> > >
в качестве своей основы, где T
- произвольное имя типа;ptr_vector
содержит указатели на векторы, соответствующие столбцам в таблице.Я решил обернуть ptr_vector
в shared_ptr
, поскольку таблицы могут содержать много миллионов строк, а vector
содержат данные для каждого столбца в ptr_vector
по той же причине.(Пожалуйста, скажите мне, можно ли это улучшить.)
Реализация операций со столбцами в этой таблице тривиальна, поскольку у меня есть доступ к собственному итератору, предоставленному вектором.Однако мне также нужна таблица для поддержки построчных операций: должны поддерживаться относительно обыденные операции, такие как добавление и удаление строк, а также возможность использовать алгоритмы STL с таблицей.Теперь я столкнулся с некоторыми проблемами проектирования, для решения которых мне нужна помощь:
- Кажется, что реализация пользовательского итератора для выполнения построчных операций необходима для выполнения описанного выше.Будет ли boost :: iterator_adaptor быть правильным способом сделать это?
- Когда пользователь добавляет строки в таблицу, я не хочу навязывать пользователю определенную структуру данных - как бы я поступил?делая это?Я подумываю принять итераторы в качестве параметров для метода
add_row()
. - Если вы считаете, что я должен реализовывать эту структуру таблиц иначе, я открыт для любых предложений, которые вы можете мне предложить.Первоначально он был разработан с целью хранения строк, прочитанных из файлов с разделителями табуляции, содержащих сотни тысяч записей строк.
Большое спасибо за вашу помощь!