想要使用矢量指针来操作对象成员的值

want to use a vector pointer to manipulate value of object member

本文关键字:对象 操作 成员 指针      更新时间:2023-10-16

我想创建一个对象 A (aArray) 的向量,并在调用 Heap 构造函数时操作 aArray.a 的值。目前,aArray.a 的值保持不变。我怎样才能正确地做到这一点?

感谢您的帮助!

#include <vector>
#include <iostream>
struct A
{
  A(int av):a(av){}
    int a;
};
struct Heap
{
  Heap(std::vector<A> *hVal)
  {
      for (int i=0; i<hVal->size(); ++i) 
      {
        hVec.push_back(hVal->at(i));
      }
      std::cout << std::endl;
      for(int i=0; i<hVec.size(); ++i)
      {
        hVec[i].a*=2;
        std::cout << "hVec[i].a*=2  is " << hVec[i].a << "n"; 
      }
  }
  std::vector<A> hVec;
};

int main()
{
  A a0(2), a1(4), a2(8);  
  std::vector<A> aArray;  
  aArray.push_back(a0);
  aArray.push_back(a1);
  aArray.push_back(a2); 
  Heap h(&aArray);
  for(int i=0; i<aArray.size(); ++i)
  {
    std::cout << "aArray[i].a = " << aArray[i].a << "n";
  }
  return 0;
}

您的Heap构造函数将*hVal复制到hVec,然后修改hVec。如果您希望它在 main 中更新aArray,请改为修改*hVal(例如通过 hVal->at(i).a *= 2; )。

更新:

struct Heap {
    Heap(std::vector<A> *p) : ptr(p) {}
    void multiply_by(int n) {
        for (int i = 0; i < ptr->size(); i++) {
            (*ptr)[i] *= n;
        }
    }
    std::vector<A> *ptr;
};
...
Heap h(&aArray);
h.multiply_by(2);

使用指针而不是向量。使用 std::vector<A> hVec; 时,您实际上是在创建一个独立的矢量对象。请改用std::vector<A> * hVec;