Объявление стека структуры внутри определения структуры

Мне нужно объявить два стека структуры внутри ее собственного объявления структуры. Я знаю, что мог бы выполнить эту операцию с массивом, если я ссылаюсь на него с помощью указателя внутри структуры (т.е. FA *goingTo[30]; даст мне массив из 30 FAs). Есть ли аналогичный способ ссылки на стек?

typedef struct FA
{
    std::stack<FA> goingTo;
    std::stack<FA> comingFrom;
};

person CodeMonkey    schedule 06.10.2014    source источник
comment
Вы имеете в виду std::stack<FA> going_from_or_to[2] (или лучше std::array<std::stack<FA>> going_from_or_to), а затем использовать указатели, итераторы или индексы для их просмотра? Не понятно, о чем вы спрашиваете.   -  person o11c    schedule 06.10.2014
comment
Или подождите, вы имеете в виду, есть ли способ выполнить итерацию внутри стека? В этом случае нет: std::stack предоставляет доступ только к элементу top. Если вам нужен доступ к другим элементам, просто используйте std::vector или std::deque напрямую; std::stack практически бесполезен.   -  person o11c    schedule 06.10.2014
comment
Структурам не разрешается содержать стандартные контейнеры самих себя. Вам придется сделать что-то другое. У Boost есть несколько контейнеров, которые могут это сделать.   -  person M.M    schedule 06.10.2014
comment
Первый вариант - это то, что я пытаюсь сделать. Прошу прощения за путаницу. Мне нужно сделать это внутри определения FA, так как у меня будет много разных FA, идущих к каждой FA и исходящих из каждой FA. Хорошо, я думаю, мне нужно посмотреть другие варианты, спасибо.   -  person CodeMonkey    schedule 06.10.2014


Ответы (1)


Объекты стека, которые вы определяете в структуре, сами будут содержать (возможно) несколько экземпляров структуры, каждый из которых содержит свои собственные стеки, которые снова содержат больше структур. Так что, если подумать, это бесконечная цепь сдерживания. Вы можете изменить определение (и использование), чтобы оно содержало стеки указателей на FA*. Это решит проблему.

typedef struct FA {
   std::stack<FA*> goingTo;
   std::stack<FA*> comingFrom;
};
person Deepan    schedule 06.10.2014