2014-10-06 2 views
1

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

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

ли вы имеете в виду в виду 'STD :: стеку going_from_or_to [2]' (или лучше 'станд :: массив <станд :: стек > going_from_or_to'), а затем использовать указатели, итераторы, или индексы для перехода через них? Непонятно, что вы спрашиваете. – o11c

+0

Или подождите, вы имеете в виду, есть ли способ перебора * внутри * стека? В этом случае нет: 'std :: stack' предоставляет только доступ к элементу' top'. Если вы хотите получить доступ к другим элементам, просто используйте 'std :: vector' или' std :: deque' напрямую; 'std :: stack' практически бесполезен. – o11c

+0

Структуры не допускаются к содержанию стандартных контейнеров. Вам нужно будет сделать что-то другое. У Boost есть несколько контейнеров, которые могут это сделать. –

ответ

0

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

typedef struct FA { 
    std::stack<FA*> goingTo; 
    std::stack<FA*> comingFrom; 
}; 
Смежные вопросы