2014-01-05 117 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; } 
} 

感谢您的帮助!