我嘗試刷新的C++我(非常有限)的知識,並嘗試實現合併搜索方法:C++:本身類包含的對象,初始化
class Sorter
{
protected:
vector<int> v;
public:
Sorter(){};
Sorter(vector<int> input_vector);
virtual void sort() = 0;
};
Sorter::Sorter(vector<int> input_vector)
{
v.assign(input_vector.begin(), input_vector.end());
}
class MergeSorter : public Sorter
{
public:
MergeSorter():Sorter(){};
MergeSorter(vector<int> input_vector):Sorter(input_vector){};
vector<int> sorted_v;
MergeSorter* left;
MergeSorter* right;
void merge();
void sort();
};
void MergeSorter::sort()
{
if(v.size() <= 1)
return;
int mid = int(v.size()/2);
left->v.assign(v.begin(), v.begin() + mid);
right->v.assign(v.begin() + mid, v.end() + 1);
left->sort();
right->sort();
left->v.assign(left->sorted_v.begin(), left->sorted_v.end());
right->v.assign(right->sorted_v.begin(), right->sorted_v.end());
merge();
return;
}
...
它編譯,但程序崩潰與「訪問違規閱讀地點「,當我嘗試指定left->v
。我覺得我需要首先創建一個對象left
(和right
),但不知道我在哪裏做,因爲它是同一個類的對象。
你似乎認爲「同一班」是某種障礙。爲什麼?這種情況絕對沒有什麼特別的。 – AnT 2012-07-09 16:31:25