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