【问题标题】:vector subcript out of range c++向量下标超出范围 C++
【发布时间】:2014-01-05 14:07:03
【问题描述】:

我正在尝试用 C++ 编写一个集合(在数学意义上),但我遇到了问题。当我启动我的程序时,出现“矢量下标超出范围”错误。我正在使用 Visual Studio,它没有显示任何错误。对不起,我的语言不好。

#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;
 }

有人可以帮我吗?

【问题讨论】:

  • 该消息意味着您正在尝试访问一个不存在的向量元素。您应该使用调试器找出位置。
  • 我还注意到你的循环有点不一致,例如我看到带有i &lt; set.size() - 1i &lt; set.size() 的for 循环以及似乎或多或少做同样事情的while 循环。在operator * 中,您不应该分配result + set[i] 的结果吗?无论如何,关于主题:您在何时何地收到错误? IE。 Set类的哪个方法,调用代码是什么样的?
  • 当我尝试减去两组或乘积两组时。

标签: vector range out


【解决方案1】:

我解决了我的问题。它在打印方法中做到了。这是此方法的正确版本:

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; }
} 

感谢您的帮助!

【讨论】:

    猜你喜欢
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多