C++ 指向存储在第二个对象中的向量中的对象的指针
我想要一些关于使用包含指向向量中对象的指针的对象的建议 我希望能够操纵向量的特定元素。我试图从对象中复制数据,但返回并确保更新相同的元素时遇到问题,因此我只想返回指向向量元素的指针操作该指针,而不必确保使用数据更新正确的元素 我想使用动态对象的控制柄C++ 指向存储在第二个对象中的向量中的对象的指针,c++,function,pointers,vector,handles,C++,Function,Pointers,Vector,Handles,我想要一些关于使用包含指向向量中对象的指针的对象的建议 我希望能够操纵向量的特定元素。我试图从对象中复制数据,但返回并确保更新相同的元素时遇到问题,因此我只想返回指向向量元素的指针操作该指针,而不必确保使用数据更新正确的元素 我想使用动态对象的控制柄 class h_AFV{ AFV * pAFV; int * cnt; friend class AFV; public: h_AFV(int); h_AFV(int, int, int, int); h_AFV
class h_AFV{
AFV * pAFV;
int * cnt;
friend class AFV;
public:
h_AFV(int);
h_AFV(int, int, int, int);
h_AFV(const h_AFV& afv) : cnt(afv.cnt), pAFV(afv.pAFV){++*cnt;}
h_AFV& operator = (const h_AFV&);
~h_AFV();...
它存储在:
std::vector<h_AFV>AFVs;
如何完成此代码并正确管理指针?通常,在
std::vector
s中使用指向对象的指针是不安全的。容器可能会在没有警告的情况下重新分配和移动物品。如果你能保证这不会发生,那么你就可以不受惩罚,但是…使用数组或链表更好吗?这种行为会使程序不稳定。是否有更好的容器,或者我应该只使用数组?当我检查对象是否已被选择和存储时,出现了一个问题。我想处理这些输入。如果选择了该对象,则我希望在再次存储之前将其删除。这取决于太多因素,无法提供一般答案。您必须了解访问时间、插入时间等方面的需求。您可能更喜欢某种散列图或树,但请再说一次:视情况而定。谢谢您的建议。我不知道向量会破坏指针。
h_AFV* player::gtAFV(int n){
return new h_AFV(AFVs[n]); <-This is how I return a pointer to the element I want to manipulate
}
void control::moveOrder(int a, int sp , bool al){
h_AFV * ph_AFV = NULL;
if(currentPlayer == 1){ph_AFV = pl1->gtAFV(marker);} <-This gets the pointer
if(currentPlayer == 2){ph_AFV = pl2->gtAFV(marker);}
ph_AFV->setStat(1); <-These work I tested the pointer with some output.
ph_AFV->setOrder('m');
mvOrder m(ph_AFV, a, sp, al);
checker(ph_AFV);
moving.push_back(m);
delete ph_AFV;
}
void mvOrder::resolve(){
int rate = speed * .01;
MessageBox(NULL, "Marker 1", "Marker!", MB_OK);
int dir = pMover->gtFace() * .0174532925;
int DBI = pMover->gtDBI();
int MaxSpd = data[DBI].gtRdSpeed();
int spd = rate * MaxSpd;
MessageBox(NULL, "Marker 2", "Marker!", MB_OK);
int dist = spd;
coord c = pMover->gtCoord();
MessageBox(NULL, "Tank Moving", "Marker!", MB_OK);
float tx = c.Xloc;
float ty = c.Yloc;
tx += (float)dist*(sin(dir));
ty -= (float)dist*(cos(dir));
int nx = tx;
int ny = ty;
pMover->setLoc(nx, ny);
if(align){pMover->setAngle(dir);}
else{pMover->setNAngle(dir);}
}
struct mvOrder{
h_AFV * pMover;
int azmuth;
int speed;
bool align;
mvOrder();
mvOrder(h_AFV*, int, int, bool);
mvOrder(const mvOrder&);
~mvOrder();
void resolve();
};