想要使用矢量指针来操作对象成员的值
want to use a vector pointer to manipulate value of object member
我想创建一个对象 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;
。
相关文章:
- 使用操作重载对象重新分配对象
- 如何在不复制的情况下操作 QByteArray 对象?
- 如果普通默认构造函数不执行任何操作,为什么我们不能使用 malloc 创建平凡可构造的对象?
- 如何在 c++ 中操作当前对象的地址?
- 操作后通过运算符分配对象
- 为什么互斥对象与原子操作不同,前者是操作系统级,后者是处理器级
- pybind 如何对 py::list 对象进行操作
- 在C++中,当表达式涉及对象时,将表达式赋值到对象中时,是否有定义的操作顺序?
- 设计模式中对象中的过程(方法和操作)的状态
- 具有已定义操作重载的 C++ 非类型化值对象/变量库
- 如何在多个函数中操作 ifstream 对象
- 如何通过 COM 互操作访问复杂对象的属性?
- 从对象成员函数内部删除操作的技术 /设计模式
- 如何使用多态性将相同的操作应用于具有相同基类的不同对象的unordered_sets
- 在提前操作过程中,对象会发生什么
- 命令模式:如何进行连续操作?(例如,移动对象)
- 在多个lambdas捕获的对象上操作
- 为什么在赋值操作完成后调用对象的析构函数
- 使用迭代器执行对象操作的函数
- 如何优化C 对象I/O操作的性能