ベクトル内の特定のオブジェクト(要素)についてaArray
、最小のソート済みヒープを作成したいと思います。
他の関数ののメンバーを変更し、メンバー
aArray
関数を呼び出しHeap
て最小ヒープを更新したい。これは、構造体に定数ベクトルを渡す必要があることを意味しHeap
ますが、これがエラーでいっぱいになっていることに多くの問題があります。定数オブジェクトをHeap
コンストラクターに渡す適切な方法は何ですか?また、関数を呼び出すときに
popHeap
、ヒープ内のルートへのポインターのみを削除したいのですが、ベクトル内のオブジェクトaArray
も削除されます。どうすればこれを修正できますか?#include <vector> #include <iostream> struct A { A(int av, int bv):a(av),b(bv){} int a, b; }; struct Heap { Heap() : ptr(new std::vector<A>()) {} Heap(std::vector<A> *p) : ptr(p) {} void makeHeap() { // some code here } void popHeap() { ptr->erase(ptr.begin()+heapLoc[0]); //DELETES aArray member! I only want to delete the pointer, not the object. //some code here } std::vector<A> *ptr; std::vector<int> heapLoc; }; int main() { A a0(2,5), a1(4,2), a2(8,4), a3(0,3); std::vector<A> aArray; aArray.push_back(a0); aArray.push_back(a1); aArray.push_back(a2); aArray.push_back(a3); for(int i=0; i<aArray.size(); ++i) { std::cout << "aArray[i].a = " << aArray[i].a << " " << "aArray[i].b = " << aArray[i].b << "\n"; } //All 4 objects outputted Heap h(&aArray); h.makeHeap(); h.popHeap(); for(int i=0; i<aArray.size(); ++i) { std::cout << "aArray[i].a = " << aArray[i].a << " " << "aArray[i].b = " << aArray[i].b << "\n"; } //Only 3 objects outputted. One gets deletated. }