1
class WavFile
{
    std::vector<short> SoundData;

public:

    std::vector<short> getSoundData()
    {
        return SoundData;
    }
}

通常我会使用fread( &SoundData[0], 1, 1337, SomeFile );

但是现在我在一个类中使用了一个向量,我遇到了以下问题:

  • 知道如何在类外设置向量大小。

  • 而且我不确定如何使用该方法作为fread将数据放入向量中的参数。

4

3 回答 3

2

一般来说,您尝试做的事情很糟糕。它有几个要点:

如果是vector在课堂上封装的话,如果是public的话,还是可以从外面正常操作的。

WavFile WF;
void* Ptr = WF.SoundData.data();
// void* Ptr = &WF.SoundData[0]; - C++03

您还可以包装一些对向量的调用,.resize()例如:

void WavFile::resize(vector::size_type new_size) {
    SoundData.resize(new_size);
}

void* WavFile::getRawPtr () {
    return SoundData.data();
    // return (&SoundData[0]); - C++03
}

如果你正在使用std::vector,你也应该在上面使用相应的 C++ 读取函数。将vector其视为内存数组是有效的,但有更好的方法来使用它,fstream例如。

如果您正在封装vector(或一般的任何std容器),请不要按值返回它!它将导致复制所有元素。相反,返回对容器的 const 引用,或者更好的是,返回范围。

于 2012-12-01T13:14:43.387 回答
1
  • 知道如何在类外设置向量大小。

您可以构造向量,将大小传递给向量的构造函数。

  • 而且我不确定如何使用该方法作为 fread 的参数将数据放入向量中。

你为什么fread开始使用?为什么不fstream呢?

此外,一旦你初始化了传递大小的向量,你就可以&v[0]像声明为 c-array 时一样使用它(即float v[const_size])。

于 2012-12-01T13:14:26.157 回答
0

您不能使用向量作为 fread 的参数。您必须分配一块内存(短缓冲区[SIZE])作为缓冲区来读取数据,然后将数据逐个元素地插入缓冲区中的向量。

虽然 C++ 中允许使用 fread,但最好使用原生 C++ 方式读取文件,例如 fstream。

于 2012-12-01T13:17:48.100 回答