首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么向量不会是空的?

为什么向量不会是空的?
EN

Stack Overflow用户
提问于 2013-11-08 15:53:02
回答 3查看 86关注 0票数 0

我想知道为什么这不能识别向量为空,并提供具有双重开始的向量pStack?该程序的目的只是简单地为堆栈向量提供50,当它为空的时候。然后,一旦提供了起始量,它就应该减去用户输入(正在下注)。然后,因为它是一个向量,所以它将旧的和带到第二次,所以可以再次用用户输入的下注减去它。

代码语言:javascript
复制
#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;
}
EN

回答 3

Stack Overflow用户

发布于 2013-11-08 15:58:23

代码语言:javascript
复制
vector<double> pStack(1);

您正在使用初始大小为1的向量来初始化向量,这就是为什么您的pStack.empty()检查返回false

相反,这样做可以使其初始状态为空。

代码语言:javascript
复制
vector<double> pStack;

另外,删除empty()检查并将push_back提升到while循环之外。

代码语言:javascript
复制
bool con = true;
pStack.push_back(start);

while(con){
   ...

您可能还想重新考虑全局变量的用法。据我所知,您可以只将startbbetpStack放入main()中。

票数 4
EN

Stack Overflow用户

发布于 2013-11-08 15:57:13

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

代码语言:javascript
复制
vector<double> pStack(1);

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

代码语言:javascript
复制
vector<double> pStack;
票数 3
EN

Stack Overflow用户

发布于 2013-11-08 15:58:38

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

代码语言:javascript
复制
vector<double> pStack(1);

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

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

代码语言:javascript
复制
vector<double> pStack;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19854043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档