我应该编写一个模拟骰子(6面)滚动6000次的程序,并将结果存储在矢量中。例如,如果骰子卷返回1,我会做类似frequency.at(0)++的事情。由于向量的大小将被修复,我还需要能够自由地访问每个元素,我想知道是否还有使用默认构造函数或其他东西来声明向量的大小。这是我目前所拥有的,但我得到“函数调用中的参数太多”和“表达式必须具有类类型”错误。也许我想做的事情是不可能的,我不知道,但只是寻求一些帮助。感谢。
我的标题文件:
#ifndef AHISTOGRAM_H
#define AHISTOGRAM_H
class aHistogram
{
public:
aHistogram();
~aHistogram();
void update(int face);
void display(int maxLengthOfLine);
void clear() const;
int count(int face);
private:
vector<int> numRolls();
int numx, m, j;
};
#endif
aHistogram.cpp:。
#include <iostream>
#include <cstdlib>
#include <vector>
#include "aHistogram.h"
using namespace std;
aHistogram::aHistogram()
{
numRolls(6);
numx, m, j = 0;
}
aHistogram::~aHistogram()
{
}
void aHistogram::update(int face)
{
numRolls.at(face - 1)++;
return;
}
答案 0 :(得分:2)
这是构造函数的初始化列表的用途:
aHistogram::aHistogram(): numRolls(6), numx(0), m(0), j(0) // constructor parameters here
{
// numRolls(6);
// numx m, j = 0;
}
您的矢量声明在您的类定义中也是错误的:
class aHistogram
{
public:
aHistogram();
~aHistogram();
void update(int face);
void display(int maxLengthOfLine);
void clear() const;
int count(int face);
private:
// vector<int> numRolls(); // this is declaring a function!
vector<int> numRolls; // USE THIS!!
int numx, m, j;
};
答案 1 :(得分:0)
如果&#34;向量&#34;的大小固定,然后使用std::array
肯定是一个更好的选择,除非你使用的是一个不支持C ++ 11的古老编译器。
浏览cppreference.com上的以上链接。在大多数情况下,它就像一个老式的&#34;数组,但它还带来了诸如边界检查(如果您使用at()
而不是operator[]
),迭代元素(begin()
,end()
等等)的好处。 ),以及许多其他&#34;的好处&#34; std::vector
。
看看这个:
#include <iostream>
#include <array>
using namespace std;
class aHistogram {
public:
aHistogram() : numRolls{0, 0, 0, 0, 0, 0} {}
int count(int face) {
return numRolls.at(face - 1);
}
void update(int face) {
numRolls.at(face - 1)++;
}
private:
array<int, 7> numRolls;
};
int main() {
aHistogram ah;
ah.update(1);
ah.update(2);
ah.update(1);
cout << "Count[1]: " << ah.count(1) << " Count[2]: " << ah.count(2) << endl;
}