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

Tom*_*mer 2 c++ memory heap stack vector

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

另外,矢量在堆中是什么意思,不是矢量对象只是指向包含元素的第一个地址的指针,还有一些其他函数

Vla*_*cow 6

std :: vector的对象是在堆栈(或静态内存)中创建的,如果你不打算使用operator new在堆中有意创建它们.但是向量包含的项目是在堆中创建的.例如,您在某个函数中按以下方式定义向量

std::vector<int> v( 100 );
Run Code Online (Sandbox Code Playgroud)

然后变量v被放置在堆栈中.但是,v的对象本身会分配一个足够大的堆,以容纳100个int类型的元素.

您可以使用operator size来确定std :: vector本身占用对象的内存量.试试这段代码

std::vector<int> v( 100 );
std::cout << sizeof( v ) << std::endl;
Run Code Online (Sandbox Code Playgroud)

正如您将看到std :: vector类型的对象的大小不依赖于对象可以操作的项目数.