我想创建一个对象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;
}
答案 0 :(得分:1)
您的Heap
构造函数将*hVal
复制到hVec
,然后修改hVec
。如果您希望更新主版中的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);
答案 1 :(得分:0)
使用指针代替向量。使用std::vector<A> hVec;
时,实际上是在创建一个独立的矢量对象。请改用std::vector<A> * hVec;
。