c++ /OF每次迭代改变属性的迭代对象
C++/OF iterating objects that change property each iteration?
我想做的是:创建一系列矩形,每帧生成一个挨着一个。每个矩形的高度是基于该时刻声音的频率,然后迭代器移动到下一个矩形,使最后一个矩形保持适当的高度。
发生了什么:屏幕变成了一个巨大的单一块,所有的空间都随着频率不断上下移动……我似乎不能让它一次迭代一个,而不是不断地改变它们。
我认为我的问题是:我不知道如何让每个迭代存储和保存自己的值,即使值是对象的一部分…
所讨论的代码:
float bldgHeighTemp;
for (int i = 0; i < 1000 ; i+=30){
for (int f = 0; f < (int)(BUFFER_SIZE/2); f++){
bldg temp;
bldgs.push_back(temp);
bldgs[i].bldgPosX = i;
bldgs[i].bldgPosY = ofGetHeight()/2;
bldgs[i].bldgWidth = 30;
bldgs[i].bldgHeight = bldgHeighTemp;
bldgs[i].draw();
bldgHeighTemp = freq[f]*-6;
}
}
我如何正确地实现这个?
先设置bldgs[i].bldgHeight = bldgHeighTemp;
,再设置bldgHeighTemp = freq[f]*-6;
。也就是说,bldgHeighTemp
是在设置之前使用的。
您的内部循环在每次迭代中向bldgs
添加一个新项,但即使在推入一个新项之后,您仍使用相同的bldgs[i]
。我不太确定我能弄清楚你到底想做什么。
我将这样重写:
float bldgHeighTemp;
for (int i = 0; i < 1000 ; i+=30){
for (int f = 0; f < (int)(BUFFER_SIZE/2); f++){
bldg temp;
temp.bldgPosX = i;
temp.bldgPosY = ofGetHeight()/2;
temp.bldgWidth = 30;
temp.bldgHeight = freq[f]*-6;
temp.draw();
bldgs.push_back(temp);
}
}
你的代码的问题是它添加的元素比它分配的属性要多,确保你理解它。
假设BUFFER_SIZE == 10
,那么内部循环(for( int f =...
)将运行5次,因此blgds.push_back()
将被调用1000 * 5 = 5000次!但是您只分配给blds[i]
,其中i < 1000
(这是由循环标题保证的)。所以,blgs[i]
和i >= 1000
,实际上,你的大多数对象,都是未初始化的
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++中带有List类的迭代器Segfault
- 迭代时从向量和内存中删除对象
- 如何在c++迭代器类型中包装std::chrono
- 带过滤器的现代迭代c++集合
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- C++矢量迭代
- 集合上的输出迭代器:assign和increment迭代器
- Boost Spirit,获取迭代器内部语义动作
- 擦除while循环中迭代的元素
- 实现一个在集合上迭代的模板函数
- 对于set上的循环-获取next元素迭代器
- C++通过改变vector.size()进行迭代
- std::list 的 end() 迭代器位置在擦除时会改变吗?
- 如果vector改变,迭代器是否指向相同的元素?或者怎么做
- 包装STL vector并改变其迭代器的行为
- c++ /OF每次迭代改变属性的迭代对象
- 如何实现std::advance来改变迭代器类型上的行为
- 当我改变矢量时迭代器发生了什么