我不确定我需要一个矢量,但我不认为我可以使用数组,因为我没有固定的大小。
我有一个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;
可能非常大,我可能需要将每个值更新多达五次。
答案 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; }