PaltryProgrammer Ответов: 1

Как указать диапазон на основе цикла for для конкретного контейнера базового класса


У меня есть класс который является производным от нескольких типов контейнеров STL и я хочу выполнить диапазон основанный на цикле for над конкретным из них например в приведенном ниже примере каков правильный синтаксис спасибо любезно

class cfoobar : public vector<int> , public map<int, int>
{
public:
     void foobar()
     {
// how to perform a range based for loop over the contents of vector<int>
          for (auto x : ? )
          {
               // ...
          }
     }
};


Что я уже пробовал:

for(auto x : vector<int>::this>
for(auto x : vector<int>::*this>
for(auto x : *vector<int>::this>

Rick York

Я не могу придумать веской причины для вывода Как из карты, так и из вектора. Я могу придумать несколько веских причин, почему бы и нет.

PaltryProgrammer

Ваш комментарий заставил меня понять, что я должен использовать отношения "is a" и "has a" в моем дизайне, так как узел не является определенным видом вектора или карты, но вместо этого "имеет" детей вектор дочерних узлов должен быть классом-членом, а не базовым классом, так как для карты это просто инструмент для доступа к вектору и, конечно же, не является базовой формой узла, так что он также должен быть классом-членом спасибо любезно Cheerios

Rick York

Это звучит гораздо лучше для меня. Желаю удачи с этим.

PaltryProgrammer

У меня есть многоядерное дерево каждый узел является вектором потому что у него есть дочерние элементы однако при итеративном обходе дерева необходимо вести запись указателя на ранее посещенный узел когда этот узел является дочерним по отношению к текущему узлу затем необходимо эффективно найти следующий дочерний узел в векторе карта использует указатели дочерних узлов в качестве ключей для предоставления индексов в вектор так что следующий дочерний указатель может быть легко получен Спасибо за Ваш комментарий Cheerios

1 Ответов

Рейтинг:
0

steveb

Вы создайте производный класс от вектора и карты, так класс как begin() и End (), унаследованный от вектора и карте. На самом деле это не имеет никакого смысла но синтаксис таков:

class cfoobar : public std::vector<int>, public std::map<int, int>
{
public:
   void foobar()
   {
      // how to perform a range based for loop over the contents of vector<int>
      for (std::vector<int>::iterator it = std::vector<int>::begin(); it != std::vector<int>::end(); it++)
      {
         // ...
      }
   }
};