C++ 在类中声明向量大小

C++ 在类中声明向量大小,c++,class,object,vector,visual-studio-2013,C++,Class,Object,Vector,Visual Studio 2013,我应该写一个程序,模拟骰子(6面)滚动6000次,并将结果存储在一个向量中。例如,如果掷骰子返回1,我将执行类似于frequency.at(0)+的操作。由于向量的大小是固定的,我还需要能够自由访问每个元素,我想知道是否有必要使用默认构造函数或其他方法声明向量的大小。这就是我目前的情况,但我遇到了“函数调用中的参数太多”和“表达式必须具有类类型”错误。也许我想做的是不可能的,我不知道,只是想寻求一些帮助。谢谢 我的头文件: #ifndef AHISTOGRAM_H #define AHISTOG

我应该写一个程序,模拟骰子(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
\ifndef AHISTOGRAM\u H
#定义一个符号
类无痕图
{
公众:
无糖图();
~aHistogram();
无效更新(int面);
无效显示(int maxLengthOfLine);
无效清除()常量;
整数计数(整数面);
私人:
向量numRolls();
int numx,m,j;
};
#恩迪夫
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;
}
#包括
#包括
#包括
#包括“aHistogram.h”
使用名称空间std;
aHistogram::aHistogram()
{
numRolls(6);
numx,m,j=0;
}
aHistogram::~aHistogram()
{
}
void aHistogram::更新(int面)
{
(面-1)+;
返回;
}

这就是构造函数的初始值设定项列表的用途:

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;
};
class-aHistogram
{
公众:
无糖图();
~aHistogram();
无效更新(int面);
无效显示(int maxLengthOfLine);
无效清除()常量;
整数计数(整数面);
私人:
//vector numRolls();//这是在声明一个函数!
向量numRolls;//使用这个!!
int numx,m,j;
};
如果“向量”的大小是固定的,那么使用肯定是更好的选择,当然,除非您使用的是不支持C++11的古老编译器

在cppreference.com上浏览上述链接。在大多数情况下,它就像一个“老式”数组,但它也有一些好处,如边界检查(如果您使用
at()
而不是
操作符[]
),能够遍历元素(
begin()
end()
,等等),以及
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;
}
#包括
#包括
使用名称空间std;
类无痕图{
公众:
aHistogram():numRolls{0,0,0,0,0,0}{
整数计数(整数面){
返回numRolls.at(面-1);
}
无效更新(整型面){
(面-1)+;
}
私人:
数组numRolls;
};
int main(){
无糖图啊;
更新(1);
更新(2);
更新(1);

您是否将
numRolls
声明为一个函数而不是一个数据成员。这不能回答问题,因此应该是一个注释。例如,向量交换比数组快。@NeilKirk您是对的,但是在这个特定的问题中,OP只需要一个“向量”计数器的数量,所以,依我看,std::数组是一个更好的选择。如果我错了,请告诉我。这个问题要求你使用向量。不过谢谢你的建议!我不明白,为什么这个问题要求你使用向量?使用std::数组会造成什么伤害?我不想击落你,我想知道问题是什么。我有几年来,我们没有使用C++,所以只想复习一些我可能忘记的东西。@快乐向量不直接包含数据,而是包含指向其他地方的指针。交换两个向量只需要交换这些指针(加上其他几个位,如大小信息)。。但是操作是在固定时间内进行的。另一方面,交换
std::array
,需要单独交换每个元素。这是一个线性操作。谢谢!!这解决了我的问题。只是一个小的后续问题,在方法中访问向量元素的正确方法是什么?我得到了一个每次我尝试访问它时,都会出现“左的“.at”“必须有类/结构/联合”。很抱歉,没有问题,这是我第一次使用类和对象,只是想最好地理解它can@user3552985您可以使用:
numRolls[0]=2;…int x=numRolls[5];
。索引运行
0-5
(总共六个)。好的,当我尝试这样做时,它会说numRolls是一个未声明的标识符。我认为问题可能来自头文件,因为我有另一个错误,说“非法成员初始化'numRolls'不是基或成员。它还说我应该在“@user3552985 you
#include
之前有”?