为什么矢量不是空的?

时间:2013-11-08 07:53:02

标签: c++ vector

我想知道为什么这不会识别向量是空的并且提供双启动的向量pStack?该程序的目的只是在它为空时第一次提供50的堆栈向量。然后,一旦提供了起始量,它应该用用户输入(正在下注)减去。然后,由于它是一个向量,它将旧的总和带到第二次,所以可以再次用用户输入的赌注减去它。

#include <iostream>
#include <string>
#include <vector>

using namespace std;


class Bet
{
public:
   void set_stack(double n);
   void set_bet(double n);
   double analyze();
   double get_stack();
   double get_bet();

private:
   double pCount;
   double bet;
};

double Bet::analyze()
{
   double p = pCount;
   double b = bet;
   double z = p - b;
   return z;
}

void Bet::set_bet(double n)
{
   bet = z;
}

double Bet::get_bet()
{
   return bet;
}

void Bet::set_stack(double n)
{
   pCount = n;
}

double Bet::get_stack()
{
   return pCount;
}


double start = 50; // Start needs to go inside of pStack
double bbet;
vector<double> pStack(1);


int main()
{
   bool con = true;
   while(con){
      if(pStack.empty()){
         pStack.push_back(start); // pStack should be supplied with start when empty
      }

      double adjst = pStack[0];

      Bet rr;
      rr.set_stack(adjst);
      pStack.clear();
      cout << "Enter min 1 Bet: ";
      cin >> bbet;
      rr.set_bet(bbet);

      double aStack = rr.analyze();
      pStack.push_back(aStack); 
      rr.set_stack(aStack);
      double newStack = rr.get_stack();

      cout << "Stack: " << newStack << endl;
      cout << "Bet: " << bbet << endl;
   }

   system("pause");
   return 0;
}

3 个答案:

答案 0 :(得分:4)

vector<double> pStack(1);

您正在初始化您的向量,其初始大小为1,这就是您的pStack.empty()检查返回false的原因。

执行此操作以使其初始状态为空。

vector<double> pStack;

另外,请移除empty()支票并将push_back提升到while循环之外。

bool con = true;
pStack.push_back(start);

while(con){
   ...

您可能还想重新考虑全局变量的使用情况。据我所知,您可以将startbbetpStack放在main()内。

答案 1 :(得分:3)

您正在使用填充构造函数。该行将向量初始化为1个元素,默认构造。

vector<double> pStack(1);

如果你想让向量开始为空,你应该只使用默认的构造函数。

vector<double> pStack;

答案 2 :(得分:2)

定义pStack向量时,使用构造函数,该构造函数接受一个表示要分配的元素数的整数。

vector<double> pStack(1);

因此,您的向量将具有1个默认初始化元素。

要创建空矢量,请执行以下操作:

vector<double> pStack;