我想知道为什么这不会识别向量是空的并且提供双启动的向量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;
}
答案 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){
...
您可能还想重新考虑全局变量的使用情况。据我所知,您可以将start
,bbet
和pStack
放在main()
内。
答案 1 :(得分:3)
您正在使用填充构造函数。该行将向量初始化为1个元素,默认构造。
vector<double> pStack(1);
如果你想让向量开始为空,你应该只使用默认的构造函数。
vector<double> pStack;
答案 2 :(得分:2)
定义pStack
向量时,使用构造函数,该构造函数接受一个表示要分配的元素数的整数。
vector<double> pStack(1);
因此,您的向量将具有1个默认初始化元素。
要创建空矢量,请执行以下操作:
vector<double> pStack;