0

我不确定我是否需要一个向量,但我认为我不能使用数组,因为我没有固定的大小。

我有一个 Singleton 类Song,它有一个成员vector<float> samples;和一个方法getSamples(int numberOfSamples)当调用这个方法时,我想让向量具有正确的大小(基于numberOfSamples),而不是可能多次更新它的一些值。

vector<float> &Song::getSamples(int numberOfSamples){
    for(int i = 0; i < numberOfFrames; i++)
        this->samples.push_back(0);
}

例如,如何将第三个值更改为 3 而不是 0?使用数组这样做会容易得多,samples[2] = 3;但问题是在调用 getSamples 方法之前我不知道向量/数组的长度。而且我认为不断迭代不是一个好主意,因为numberOfSamples它可能非常大,而且我可能需要将每个值更新多达五次。

4

2 回答 2

3

您可以简单地调整T()向量的大小,这将初始化所有新值(默认值为0.0for ):float

vector<float> &Song::getSamples(int numberOfSamples){
    this->samples.resize(this->samples.size() + numberOfFrames);
    // did you mean numberOfSamples instead of numberOfFrames, there?
}

要为给定索引设置值,您可以像使用普通 C 数组一样使用下标运算符:

this->samples[2] = 3;
于 2012-08-05T19:25:52.307 回答
0

查找表怎么样?像这样的东西:

static const float data[5] = { 0.0, 1.5, -8.25, 10.0, Inf };

samples.reserve(samples.size() + numberOfFrames);   // don't forget this!!

for (unsigned int i = 0; i != numberOfFrames; ++i)
{
    samples.push_back(data[i % 5]);
}

否则,如果大多数元素相同,只需更改不同的元素:

samples.resize(samples.size() + numberOfFrames, 25.5f);  // set default to 25.5
for (unsigned int i; i < numberOfSamples; i += 3) { samples[i] = 3.0f; }
于 2012-08-05T19:23:48.840 回答