gpt4 book ai didi

c++ - 变长数组 : How to create a buffer with variable size in C++

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:59:12 26 4
gpt4 key购买 nike

我目前正在编写一个移动平均线类。

目标是在创建 Running_Average 类的新对象时能够将缓冲区大小指定为构造函数的一部分。

#include <iostream>
#include "Complex.h"
#include <cmath>
#include<stdio.h>
#include<stdlib.h>
#include <windows.h>

using namespace std;

class Running_Average
{
public:
double sum = 0;
double average = 0;
int i;

double Average(void); // Member functions declaration
void AddSample(double);
Running_Average(int);
};


Running_Average::Running_Average(int size) {
int buffersize = size;
double buffer[buffersize] = { 0 };
}

void Running_Average::AddSample(double val) //Add new values to buffer
{
for (i = 9; i>0; i--)
{
buffer[i] = buffer[i-1];
}
buffer[0] = val;
}

double Running_Average::Average(void) //Calculate Average of current values in buffer
{
for (i = 0; i<buffersize; i++)
{
cout << buffer[i] << endl;
sum += buffer[i];
}
average = sum / buffersize;
sum = 0;
return average;
}

int main()
{
double value;
int i;
int f = 0;
Running_Average test;

for (i = (40); i < (50); i++)
{
test.AddSample(i);
}

while (1)
{
i = rand() % 100;
test.AddSample(i);
value = test.Average();
cout << endl;
cout << value << endl;
cout << endl;
Sleep(1000);
}

}

但是,构造函数让我很伤心:

Running_Average::Running_Average(int size) {
int buffersize = size;
double buffer[buffersize] = { 0 };
}

具体来说:

buffer[buffersize]

在 visual studio 中抛出一个错误:

expression must have a constant size.

我希望用户通过将值传递给构造函数来指定在创建新对象时要使用的缓冲区大小。

如何在不抛出错误的情况下完成这项工作?

感谢您的帮助!

编辑: 已解决!谢谢大家的协助!我设法通过使用 std::vector 来定义可变大小的数组来使函数正常工作。

最佳答案

有很多方法可以做到这一点。从好到坏,我想到的是:

1 使用 std::vector

int buffersize = size;
std::vector<double> buffer(buffersize);

2 内置唯一指针或共享指针(取决于用途)

int buffersize = size;
auto buffer = make_unique<double[]>(buffersize) // C++14

int buffersize = size;
auto buffer = make_shared<double[]>(buffersize) // C++14

3 手动分配

int buffersize = size;
double *buffer = new double[buffersize];

// delete [] buffer, must be called later

4 在堆栈上分配(建议,并且取决于平台)

int buffersize = size;
double *buffer = alloca(buffersize * sizeof(*buffer));

请注意,在所有这些情况下,您都可以像数组一样索引缓冲区。

关于c++ - 变长数组 : How to create a buffer with variable size in C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50575963/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com