【发布时间】:2020-12-22 23:57:28
【问题描述】:
我的目标是有一个 std::list 为我将放入其中的对象分配足够的内存,因此我不必在它扩展时处理潜在的异常,或者它扩展所需的额外时间。
我的第一次尝试是从波表拼接:
std::list<T> list();
auto listI = list.begin;
typename std::list<T>::iterator waveStart = waveTable.begin();
for(int i = 0; i < waveIndex; i++) {
waveStart++;
}
typename std::list<T>::iterator waveEnd;
int tCounter = nSamples;
while(tCounter > 0) {
if(tCounter > (waveTable.size() - waveIndex)) {
waveEnd = waveStart;
for(int i = 0; i < (waveTable.size() - waveIndex); i++) {
waveEnd++;
}
tCounter = (tCounter - (waveTable.size() - waveIndex));
} else {
waveEnd = waveStart;
for(int i = 0; i < tCounter; i++) {
waveEnd++;
}
tCounter = 0;
}
list.splice(listI, waveTable, waveStart, waveEnd);
waveStart = waveTable.begin();
}
phase += (tp * frequency * (nSamples/sampleRate));
while(phase > tp) {
phase -= tp;
}
waveIndex = (phase / tp) * waveTable.size();
我本来打算复制这些值,但是 splice 从 waveTable 中删除了这些值,所以我打算使用 insert。
问题是,插入会增加列表的大小,我无法找到一种方法来告诉列表需要多少内存来保存我想要存储的所有值。
【问题讨论】: