-1

オブジェクトA(aArray)のベクトルを作成し、ヒープコンストラクターを呼び出すときに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;

}
4

2 に答える 2

1

コンストラクターはにHeapコピー*hValしてからhVec、を変更しhVecます。aArraymainで更新する場合は、*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);
于 2012-11-24T04:11:04.723 に答える
0

ベクトルの代わりにポインタを使用してください。使用std::vector<A> hVec;する場合、実際には独立したベクトルオブジェクトを作成しています。std::vector<A> * hVec;代わりに使用してください。

于 2012-11-24T04:10:29.357 に答える