我正在一個程序模板實踐和遇到一個奇怪的問題:奇怪即for循環未正確執行
[code]
#include<iostream>
#include<new>
using namespace std;
template<class T>
class Vector {
private:
int Vector_Size;
T* Vector_Element;
int Free_Vector_Elements;
int Occupied_Vector_Elements;
int* Free_Element_List;
int* Occupied_Element_List;
public:
Vector() : Vector_Size(0), Vector_Element(0) {}
Vector(T Size) : Vector_Size(Size), Vector_Element(new T[Size]) {
for (int Element = 0; Element < Vector_Size; ++Element) { Vector_Element[Element] = 0; }
}
~Vector() {
delete[] Vector_Element;
delete[] Free_Element_List;
delete[] Occupied_Element_List;
}
T& operator[](int Element);
const T& operator[](int Element) const;
void Resize_Vector(int Rellocated_Size);
void Scan_Vector();
void Show_Vector_Info();
};
template<class T>
T& Vector<T>::operator[](int Element) { return(Vector_Element[Element]); }
template<class T>
const T& Vector<T>::operator[](int Element) const { return(Vector_Element[Element]); }
template<class T>
void Vector<T>::Resize_Vector(int Rellocated_Size) {
if (Rellocated_Size < Vector_Size) { cout << "Error:smaller size rellocated\n"; return; }
int Element;
T* Rellocated_Vector = new (nothrow) T[Rellocated_Size];
if (Rellocated_Vector == 0) { cout << "Error:memory could not be allocated\n"; return; }
for (Element = 0; Element < Vector_Size; ++Element) {
Rellocated_Vector[Element] = Vector_Element[Element];
}
for (int Clear = 0; (Clear + Element) < Rellocated_Size; ++Clear) { Rellocated_Vector[Clear + Element] = 0; }
delete[] Vector_Element;
Vector_Element = Rellocated_Vector;
Vector_Size = Rellocated_Size;
}
template<class T>
void Vector<T>::Scan_Vector() {
Free_Vector_Elements = 0;
Occupied_Vector_Elements = 0;
int Element, Free_Counter = 0, Occupied_Counter = 0;
for (Element = 0; Element < Vector_Size; ++Element) {
if (Vector_Element[Element] == 0) { ++Free_Vector_Elements; }
else if (Vector_Element[Element] != 0) { ++Occupied_Vector_Elements; }
}
Free_Element_List = new int[Free_Vector_Elements];
Occupied_Element_List = new int[Occupied_Vector_Elements];
for (Element = 0; Element < Vector_Size; ++Element) {
if (Vector_Element[Element] == 0) { Free_Element_List[Free_Counter] = Element; ++Free_Counter; }
else if (Vector_Element[Element] != 0) { Occupied_Element_List[Occupied_Counter] = Element; ++Occupied_Counter; }
}
}
template<class T>
void Vector<T>::Show_Vector_Info() {
if (Free_Vector_Elements != 0) {
cout << "There are: " << Free_Vector_Elements << " free elements" << endl;
for (int Element = 0; Element < Free_Vector_Elements; ++Element) {
cout << "Element " << Free_Element_List[Element] << ": Free" << endl;
}
}
if (Occupied_Vector_Elements != 0) {
cout << endl;
cout << "There are: " << Occupied_Vector_Elements << " occupied elements" << endl;
for (int Element = 0; Element < Occupied_Vector_Elements; ++Element) {
cout << "Element " << Occupied_Element_List[Element] << ": " << Vector_Element[Occupied_Element_List[Element]] << endl;
}
}
}
int main() {
Vector<int> Test_Vector(5);
Test_Vector.Resize_Vector(10);
Test_Vector.Scan_Vector();
Test_Vector.Show_Vector_Info();
return 0;
}
[/code]
在49行的for循環的作用:當我設置清除爲0,程序執行正常但是在創建了一個程序流程表之後,我注意到它應該清除第4個元素以及這是不想要的行爲,但它並不奇怪,它的工作原理就好像它清除了第五個元素,但是當我將Clear設置爲1時,元素5不會得到清除,它讓我困惑,爲什麼?第一個循環迭代 將counter +元素的Rellocated_Vector設置爲0 + 4,並且理論上應該清除第4個元素,但它會清除第5個元素,原因是什麼?
除此之外,我的問題是: -is我的代碼可以理解嗎? - 我的代碼乾淨嗎? - 是我的程序高效還是可以刪除某些部分以使其更好? -我可以在哪裏找到模板的中高難度練習,主要是我發現的模板太簡單了,或者我自己就像上面的模板一樣,需要幾個小時才能提出具有挑戰性的問題。
一旦你解決了這個錯誤,你的其他問題應在[代碼審查](http://codereview.stackexchange.com/)上發佈。 – Quentin
歡迎來到Stackoverflow。如果你在這個程序中有一個bug,那麼你可以製作一個[Minimal,Complete,and Verifiable example]來演示這個bug。這段代碼沒有這樣做。然後使用您的調試器嘗試 ,以便在您的MVCE中自己識別錯誤。如果你不能,那麼用你的MVCE發佈一個問題。此外,一次在Stackoverflow上的一個問題。 –
ok瞭解!我不會做這樣的職位,下一次 – globalturist