Как работать с коллекцией STL

#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);