为矢量成员和更新元素提供默认值

时间:2012-08-05 19:17:27

标签: c++ arrays vector

我不确定我需要一个矢量,但我不认为我可以使用数组,因为我没有固定的大小。

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

numberOfSamples

那么例如如何将第3个值更改为3而不是0?使用数组会更容易,像vector<float> &Song::getSamples(int numberOfSamples){ for(int i = 0; i < numberOfFrames; i++) this->samples.push_back(0); } 那样做但问题是我在调用getSamples方法之前不知道向量/数组的长度。而且我认为不断迭代是一个好主意,因为samples[2] = 3;可能非常大,我可能需要将每个值更新多达五次。

2 个答案:

答案 0 :(得分:3)

您可以简单地resize向量,该值将初始化(默认值为T()0.0 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;

答案 1 :(得分: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; }