pop_back() 不工作
pop_back() not working
我有以下创建一个 Stack
对象的主程序,用双打填充它然后弹出它们。代码文件很好,但 pop_back()
部分似乎不起作用,而 s.back()
确实 return 正确的值。这怎么可能?
#include "Stack.h"
#include <iostream>
#include <deque>
using namespace std;
int main() {
Stack<double> s(0,0.0);
// Write doubles into Stack
int i ;
for (i=0 ; i<15 ; i++) {
s.push(i*i) ;
}
// Read doubles back from fifo
while (!s.empty()) {
double val = s.pop() ;
std::cout << "Popping value " << val << " from stack" << std::endl ;
}
return 0 ;
}
我的头文件是这样的,我省略了与问题无关的部分。
#ifndef STACK_H
#define STACK_H
#include <iostream>
#include <deque>
template<class T>
class Stack {
public:
Stack(int len, T defval): s(len+1, defval) {
return;
}
~Stack() {
//delete [] s;
}
void push(T c) {
s.push_back(c);
}
T pop() {
return s.back();
s.pop_back();
}
private:
std::deque<T> s; //Array<T> s;
};
#endif
T pop() {
return s.back();
// ^^^^^
s.pop_back(); // <- unreachable!
}
当你从一个函数return
时,所有后续指令将永远不会被执行。
将 s.back()
的结果存储在一个临时变量中:
T pop() {
auto back = s.back();
s.pop_back();
return back;
}
我有以下创建一个 Stack
对象的主程序,用双打填充它然后弹出它们。代码文件很好,但 pop_back()
部分似乎不起作用,而 s.back()
确实 return 正确的值。这怎么可能?
#include "Stack.h"
#include <iostream>
#include <deque>
using namespace std;
int main() {
Stack<double> s(0,0.0);
// Write doubles into Stack
int i ;
for (i=0 ; i<15 ; i++) {
s.push(i*i) ;
}
// Read doubles back from fifo
while (!s.empty()) {
double val = s.pop() ;
std::cout << "Popping value " << val << " from stack" << std::endl ;
}
return 0 ;
}
我的头文件是这样的,我省略了与问题无关的部分。
#ifndef STACK_H
#define STACK_H
#include <iostream>
#include <deque>
template<class T>
class Stack {
public:
Stack(int len, T defval): s(len+1, defval) {
return;
}
~Stack() {
//delete [] s;
}
void push(T c) {
s.push_back(c);
}
T pop() {
return s.back();
s.pop_back();
}
private:
std::deque<T> s; //Array<T> s;
};
#endif
T pop() {
return s.back();
// ^^^^^
s.pop_back(); // <- unreachable!
}
当你从一个函数return
时,所有后续指令将永远不会被执行。
将 s.back()
的结果存储在一个临时变量中:
T pop() {
auto back = s.back();
s.pop_back();
return back;
}