#memory-management #vector #stl #stack
#управление памятью #вектор #stl #стек
Вопрос:
Я работаю над вектором стеков. У меня есть следующая переменная.
std::vector< std::stack< unsigned long > > myVectorOfStacks;
Я заинтересован в получении стека с определенным индексом в векторе, используя приведенный ниже вызов.
std::stack< unsigned long > amp; tempStack = myVectorOfStacks.at ( Номер стека );
Это сбой. Может кто-нибудь, пожалуйста, предложить мне выход из этого.
Моя основная потребность — иметь стек ТОЛЬКО в том случае, если его нет. Итак, в начале у меня может не быть стека с индексом 2. Для первого использования, скажем, НАЖМИТЕ STACK2 VALUEA, мне нужно создать новый стек во 2-м местоположении в vector. Далее по строке, если я получу другое значение PUSH STACK2, мне нужно ПОВТОРНО использовать ранее созданный стек, а не создавать новый.
Пожалуйста, поделитесь своими мыслями.
спасибо, Паван.
Ответ №1:
Если вы вызываете vector
at
метод, вы должны быть уверены, что существует стек с этим индексом. Вероятно, именно это приводит к сбою вашего кода. Нет стека с индексом, с которым вы вызываете at
.
Если вы хотите добавить новое значение в несуществующий стек, вам нужно сначала создать стек. Вам нужно убедиться, что в вашем векторе есть хотя бы stackNumber 1
стеки.
Вы должны сделать что-то вроде этого:
while (myVectorOfStacks.size() <= stackNumber)
myVectorOfStacks.push_back(std::stack<unsigned long>());
std::stack<unsigned long> amp; tempStack = myVectorOfStacks.at(stackNumber);
tempStack.push_back(VALUEA);