C ++: реализация итератора строк для таблицы - PullRequest
2 голосов
/ 05 июля 2011

У меня есть универсальный табличный класс, реализованный на C ++, который использует shared_ptr< ptr_vector< vector<T> > > в качестве своей основы, где T - произвольное имя типа;ptr_vector содержит указатели на векторы, соответствующие столбцам в таблице.Я решил обернуть ptr_vector в shared_ptr, поскольку таблицы могут содержать много миллионов строк, а vector содержат данные для каждого столбца в ptr_vector по той же причине.(Пожалуйста, скажите мне, можно ли это улучшить.)

Реализация операций со столбцами в этой таблице тривиальна, поскольку у меня есть доступ к собственному итератору, предоставленному вектором.Однако мне также нужна таблица для поддержки построчных операций: должны поддерживаться относительно обыденные операции, такие как добавление и удаление строк, а также возможность использовать алгоритмы STL с таблицей.Теперь я столкнулся с некоторыми проблемами проектирования, для решения которых мне нужна помощь:

  1. Кажется, что реализация пользовательского итератора для выполнения построчных операций необходима для выполнения описанного выше.Будет ли boost :: iterator_adaptor быть правильным способом сделать это?
  2. Когда пользователь добавляет строки в таблицу, я не хочу навязывать пользователю определенную структуру данных - как бы я поступил?делая это?Я подумываю принять итераторы в качестве параметров для метода add_row().
  3. Если вы считаете, что я должен реализовывать эту структуру таблиц иначе, я открыт для любых предложений, которые вы можете мне предложить.Первоначально он был разработан с целью хранения строк, прочитанных из файлов с разделителями табуляции, содержащих сотни тысяч записей строк.

Большое спасибо за вашу помощь!

1 Ответ

2 голосов
/ 05 июля 2011

В библиотеке Boost есть контейнер с именем multi_array , который предоставляет n-мерный динамический массив, к которому можно обращаться и которым можно манипулировать по каждому измерению.Кажется, это очень похоже на то, что вы пытаетесь построить, возможно, вы могли бы использовать его вместо этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...