Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Store results of std::stack .pop() method into a variable

Tags:

c++

stack

I'd like to do the following:

std::stack <int> s; int h = 0; s.push(2); h = s.pop(); 

Such as to have h hold the value 2. When I try my method, I get “void value not ignored as it ought to be”.

Is this not the intention of the .pop() method? What is the preferred way to do this?

like image 301
PinkElephantsOnParade Avatar asked Aug 30 '12 22:08

PinkElephantsOnParade


People also ask

Does stack POP return a value C++?

S. pop() does not return any value. Because pop() is void function.

What does the pop () function on a stack do?

stack::pop() function is an inbuilt function in C++ STL, which is defined in <stack>header file. pop() is used to pop or remove an element from the top of the stack container. The content from the top is removed and the size of the container is reduced by 1.

What will happen if pop is called on an empty stack?

Underflow happens when we try to pop an item from an empty stack. If top is less than zero this means that an uncaught underflow has occurred.


2 Answers

The standard library containers separate top() and pop(): top() returns a reference to the top element, and pop() removes the top element. (And similarly for back()/pop_back() etc.).

There's a good reason for this separation, and not have pop remove the top element and return it: One guiding principle of C++ is that you don't pay for what you don't need. A single function would have no choice but to return the element by value, which may be undesired. Separating concerns gives the user the most flexibility in how to use the data structure. (See note #3 in the original STL documentation.)

(As a curiousum, you may notice that for a concurrent container, a pop-like function is actually forced to remove and return the top value atomically, since in a concurrent context, there is no such notion as "being on top" (or "being empty" for that matter). This is one of the obvious examples of how concurrent data structures take a significant performance hit in order to provide their guarantees.)

like image 165
Kerrek SB Avatar answered Sep 30 '22 17:09

Kerrek SB


You can use:

h = s.top(); 

then after that use(if you want to remove the most recent value otherwise do nothing)

 s.pop(); 

It works the same way!!

like image 38
Marco167 Avatar answered Sep 30 '22 19:09

Marco167