下面的C++代码用一些对象填充一个向量,然后删除其中的一些对象,但看起来它删除了错误的对象:
vector<Photon> photons;
photons = source->emitPhotons(); // fills vector with 300 Photon objects
for (int i=0; i<photons.size(); i++) {
bool useless = false;
// process photon, set useless to true for some
// remove useless photons
if (useless) {
photons.erase(photons.begin()+i);
}
}
Run Code Online (Sandbox Code Playgroud)
我这样做了吗?我在想这条线photons.erase(photons.begin()+i);可能是问题?
在以下情况下,如何从列表中删除屏幕?
class ScreenManager {
list<GameScreen> screens;
void removeScreen(GameScreen & screen) {
//screens.remove(screen); // won't work
//screens.erase( remove( screens.begin(), screens.end(), screen ), screens.end() ); // won't work either
}
}
Run Code Online (Sandbox Code Playgroud) 来自Java,PHP背景,我试图进入C++.我想在一个结构中存储一个数组.我的问题是在初始化结构后指定数组的大小.
这是我的结构代码:
struct SpriteAnimation {
// ...
int parts; // total number of animation-parts
unsigned int textures[]; // array to store all animation-parts
// ...
};
Run Code Online (Sandbox Code Playgroud)
这里主要功能:
SpriteAnimation bg_anim;
bg_anim.parts = 3;
unsigned int *myarray = new unsigned int[bg_anim.parts];
bg_anim.textures = myarray;
Run Code Online (Sandbox Code Playgroud)
我需要更改什么来解决这个问题?
在C++中,推荐删除指针的方法是什么?例如,在下面的例子中,我是否需要所有三行来安全地删除指针(如果是这样,他们做了什么)?
// Create
MyClass* myObject;
myObject = new MyClass(myVarA, myVarB, myVarC);
// Use
// ...
// Delete
if(myObject) {
delete myObject;
myObject = NULL;
}
Run Code Online (Sandbox Code Playgroud) 在C++中,我如何声明一个接口,我可以使用它,如下所示:
/** Enemy "Interface" */
Class Enemy {
Enemy();
virtual ~Enemy();
virtual void doStuff() = 0;
};
/** Enemy of type 1 */
Class Enemy_type1 : public Enemy {
Enemy_type1();
virtual ~Enemy_type1();
virtual void doStuff() {
// different for every type of enemy
}
};
/** Add an enemy to EnemyManager */
void EnemyManager::addEnemy(Enemy * e) {
this->enemies.push_back(*e); // declared as vector<Enemy> enemies;
}
Run Code Online (Sandbox Code Playgroud) 在下面,我怎样才能使程序使用draw方法MainMenuScreen而不是来自GameScreen?
class GameScreen {
public:
virtual void GameScreen::draw() {
cout << "Drawing the wrong one..." << endl;
}
};
class MainMenuScreen : public GameScreen {
public:
void MainMenuScreen::draw() {
cout << "Drawing the right one..." << endl;
}
};
class ScreenManager {
public:
list<GameScreen> screens;
// assume a MainMenuScreen gets added to the list
void ScreenManager::draw()
{
for ( list<GameScreen>::iterator screen = screens.begin();
screen != screens.end(); screen++ )
{
screen->draw(); /* here it uses …Run Code Online (Sandbox Code Playgroud)