在类中使用向量

时间:2012-11-11 17:13:06

标签: c++ vector

我尝试实现堆类,但我不能在其中使用vector。

#include <vector>

template <typename T>
class Heap {

public:
    Heap() {
    current_size = 0;
    }
private:
    int current_size;
    std::vector<T> array;
};

当我尝试运行它时,此程序崩溃了。 “project2.exe已停止工作。”

编辑:

主要功能:

int main(int argc,char *argv[]) {

    Heap<int> events;
}

1 个答案:

答案 0 :(得分:1)

"project2.exe has stopped working."是一个模糊的错误,但肯定是在运行时发生的。它对您或您的程序用户没有帮助,因此您需要实现更好的错误处理。

使用向量时,运行时错误通常发生在错误的分配(std::bad_alloc异常)和访问向量中不存在的元素(std::out_of_range异常)。捕获这些异常以防止程序崩溃,泄漏内存并显示"project2.exe has stopped working."错误消息。

您可以通过在main函数中放置try-catch块来捕获程序中的所有异常:

int main(int argc, char *argv[])
{
    try
    {
        // put all your code here
        Heap<int> events;
    }
    catch (const std::exception& x)
    {
        // all std exceptions are caught here
        std::cerr << x.what() << '\n';
    }
}

如果您的代码包含vector[subscript],则不会抛出std::out_of_range异常。如果您不需要对性能至关重要,请将其替换为vector.at(subscript),以便抛出异常。

请记住,错误处理不会解决问题,但可以为您提供导致解决方案的重要提示。此外,您应该考虑使用调试器。他们会告诉你哪一行代码导致程序停止工作。