pop_back()无效

时间:2017-03-31 12:43:17

标签: c++ stack deque pop

我有以下主程序创建一个Stack对象,用双打填充它然后弹出它们。代码文件很好,但pop_back()部分似乎不起作用,而s.back()确实返回正确的值。这怎么可能?

#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

1 个答案:

答案 0 :(得分:5)

T pop() {
    return s.back();
//  ^^^^^

    s.pop_back(); // <- unreachable! 
}

当您从某个函数return时,所有后续指令都永远不会被执行

s.back()的结果存储在临时变量中:

T pop() {
    auto back = s.back();
    s.pop_back();  
    return back;
}