0

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

#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;
}
4

3 回答 3

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){
   ...

您可能还想重新考虑对全局变量的使用。据我所知,你可以把start,bbetpStack里面main()

于 2013-11-08T07:58:22.593 回答
3

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

vector<double> pStack(1);

如果您希望向量一开始是空的,您应该只使用默认构造函数。

vector<double> pStack;
于 2013-11-08T07:57:13.163 回答
2

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

vector<double> pStack(1);

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

要创建一个空向量,请执行以下操作:

vector<double> pStack;
于 2013-11-08T07:58:38.233 回答