C++ 向量';堆栈/堆中的元素?长输入,c++;

C++ 向量';堆栈/堆中的元素?长输入,c++;,c++,memory,vector,stack,heap,C++,Memory,Vector,Stack,Heap,我有个问题 据我所知,如果我将接收很多元素,并将它们放入堆栈中,进程可能会崩溃,堆应该更安全、更大,因此,当我分配 向量v和插入元素,它们将存储在堆中,就像其他主题中回答的那样,对吗? 所以我的程序不能长时间输入崩溃,对吗 另外,向量在堆中是什么意思?向量对象只是指向包含元素的第一个地址的指针,如果您不打算使用new运算符在堆中创建std::vector的对象,那么std::vector的对象除了在堆栈(或静态内存)中创建外,还将在堆栈中创建。但是向量包含的项是在堆中创建的。例如,当您在某些函数

我有个问题 据我所知,如果我将接收很多元素,并将它们放入堆栈中,进程可能会崩溃,堆应该更安全、更大,因此,当我分配 向量v和插入元素,它们将存储在堆中,就像其他主题中回答的那样,对吗? 所以我的程序不能长时间输入崩溃,对吗


另外,向量在堆中是什么意思?向量对象只是指向包含元素的第一个地址的指针,如果您不打算使用new运算符在堆中创建std::vector的对象,那么std::vector的对象除了在堆栈(或静态内存)中创建外,还将在堆栈中创建。但是向量包含的项是在堆中创建的。例如,当您在某些函数中以以下方式定义向量时

std::vector<int> v( 100 );
标准:向量v(100); 然后变量v被放置在堆栈中。然而,对象本身(即v)分配了一个足够大的堆范围,可以容纳100个int类型的元素

您可以使用运算符sizeof来确定std::vector类型的对象本身占用了多少内存。试试这个代码

std::vector<int> v( 100 );
std::cout << sizeof( v ) << std::endl;
标准:向量v(100);
std::cout如果您正在处理大量数据,并且不知道会有多少数据,那么堆存储通常是正确的选择。但是,如果您试图使用太多的内存(这是一个有限的资源),您的程序仍然可能会耗尽内存。通常,这将导致抛出一个
bad_alloc
异常,但如果您没有捕获并处理它,那么您的程序将有效地崩溃。到底有多少内存可用取决于很多因素,包括操作系统、硬件和编译器配置

标准的
vector
类通常在堆上存储数据,这是正确的,尽管对象本身可能在堆栈上(取决于您如何声明它)。在内部,您可以将其视为一个动态数组(分配了
new[]
),必要时可以重新分配。严格地说,它可能不是以这种方式实现的,但在功能上是类似的