2014-01-05 149 views
0

我想在C++中編寫一組(在數學sens),但我有問題。當我啓動我的程序時,我有「矢量標記超出範圍」錯誤。我正在使用Visual Studio,並沒有顯示任何錯誤。對不起,我的壞語言。向量超出範圍C++

#include "Set.h" 



template <class T> 
void Set<T>::print() { 
cout << endl << "{"; 
for(int i = 0; i < set.size() - 1; i++) { 
    cout << set[i] << ", "; 
} 
//cout << set[set.size()] << "}" << endl; 
cout << endl; 
} 

template <class T> 
bool Set<T>::contains(T value) { 
for(unsigned int i = 0; i < set.size(); i++) { 
    if(set[i] == value) return true; 
} 
return false; 
} 

template <class T> 
void Set<T>::operator +(const T &obj) { 
if(!contains(obj)) set.push_back(obj); 
} 

template <class T> 
void Set<T>::operator -(const T &obj) { 
if(contains(obj)) { 
    unsigned int i = 0; 
    // NIE DZIAŁA 
    while(i < set.size()) { 
     if(set[i] == obj) break; 
     i++; 
    } 


    while(i < (set.size() - 1)) { 
     set[i] = set[i + 1]; 
     i++; 
    } 

    //set[i] = set[set.size()]; 
} 
} 

template <class T> 
Set<T> Set<T>::operator +(const Set<T> &obj) { 
Set<T> result; 

for(unsigned int i = 0; i < set.size(); i++) { 
    result + set[i]; 
} 

for(unsigned int i = 0; i < obj.set.size(); i++) { 
    if(!result.contains(obj.set[i])) { 
     result + obj.set[i]; 
    } 
} 

return result; 
} 

template <class T> 
Set<T> Set<T>::operator -(const Set<T> &obj) { 
Set<T> result; 

for(unsigned int i = 0; i < set.size() - 1; i++) { 
    if(!contains(obj.set[i])) { 
     result + set[i]; 
    } 
} 

return result; 
    } 

template <class T> 
Set<T> Set<T>::operator *(const Set<T> &obj) { 
Set<T> result; 

for(unsigned int i = 0; i < set.size() - 1; i++) { 
    if(contains(obj.set[i])) { 
     result + set[i]; 
    } 
} 

return result; 
} 

有人可以幫我嗎?

+0

該消息表示您嘗試訪問不存在的矢量元素。你應該使用調試器來找出在哪裏。 –

+0

另外我注意到你在循環中有點不一致,例如我看到了帶有'i CompuChip

+0

當我試圖減去兩套或產品兩套。 – user2316721

回答

0

我解決了我的問題。它採用了印刷方式。這是此方法的正確版本:

template <class T> 
void Set<T>::print() { 
if(!set.empty()) { 
    cout << endl << "{"; 
    for(unsigned int i = 0; i < set.size() - 1; i++) { 
     cout << set[i] << ", "; 
    } 
    cout << set[set.size() - 1] << "}" << endl; 
    cout << endl; } 
} 

感謝您的幫助!