我想知道为什么这不能识别向量为空,并提供具有双重开始的向量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;
}发布于 2013-11-08 15:58:23
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()中。
发布于 2013-11-08 15:57:13
您正在使用fill构造函数。此行将向量初始化为1个元素,默认构造。
vector<double> pStack(1);如果你想让向量一开始是空的,你应该使用默认的构造函数。
vector<double> pStack;发布于 2013-11-08 15:58:38
在定义pStack向量时,您可以使用构造函数,该构造函数接受表示要分配的元素数量的整数。
vector<double> pStack(1);因此,您的向量将具有1个默认初始化的元素。
要创建空向量,请执行以下操作:
vector<double> pStack;https://stackoverflow.com/questions/19854043
复制相似问题