我加载了23个纹理,并将它们命名为t1, t2, ... , t23,
我有一个可以释放所有纹理的函数,但我希望能让它更有效(或使用更少的代码)来释放所有纹理。
目前,它是这样做的:
FreeTexture(t1);
FreeTexture(t2);
.
.
.
FreeTexture(t23);
所以我试着这样做:
for (int i=1; i< 23; i++){
//i int-to-string
//concatenate 't' + 'i_string'
FreeTexture(ti);
}
但我不确定实现这类事情的最佳方法。
或者将所有纹理放在数组中并且只是迭代数组会更容易? t[i]
?
更新
我已将代码更改为:
int numberOfTextures = 23;
std::vector<GLuint> v(numberOfTextures);
v[1] = LoadTexture("resources/RoadTex1.raw", 512, 512);
v[2] = LoadTexture("resources/RoadTex2.raw", 512, 512);
.
.
.
void freeTiles(){
for (int i=1; i<=numberOfTextures; i++){
FreeTexture(v[i]);
}
}
答案 0 :(得分:0)
Texture *t[NUM_TEXTURES];
for(int i=0;i<NUM_TEXTURES;i++) {
FreeTexture(t[i]);
}
创建一个纹理指针数组,遍历数组。这是直接C版。在C ++中,您可以使用向量并从头到尾使用迭代器。
道歉,我错过了C ++请求:
#include <vector>
std::vector<Texture *> t;
for(std::vector<Texture *>::iterator i = t.begin(); i!= t.end(); ++i) {
FreeTexture(*i);
}
答案 1 :(得分:0)
存储在std :: vector中是个好主意,,,你的for循环就足够了。但更好的方式,因为@ user2278777说是使用迭代器。另一种称职的方式是使用foreach
// for_each example
#include <iostream> // std::cout
#include <algorithm> // std::for_each
#include <vector> // std::vector
void myfunction (int i) { // function:
std::cout << ' ' << i;
}
struct myclass { // function object type:
void operator() (int i) {std::cout << ' ' << i;}
} myobject;
int main () {
std::vector<int> myvector;
myvector.push_back(10);
myvector.push_back(20);
myvector.push_back(30);
std::cout << "myvector contains:";
for_each (myvector.begin(), myvector.end(), myfunction);
std::cout << '\n';
// or:
std::cout << "myvector contains:";
for_each (myvector.begin(), myvector.end(), myobject);
std::cout << '\n';
return 0;
}
输出 myvector包含:10 20 30 myvector包含:10 20 30