Top.Mail.Ru
Ответы

C++: где vector хранит внутренний массив? В стеке или в куче?

По дате
По рейтингу
Аватар пользователя
Новичок

Вектор в C++ хранит свой внутренний массив в куче. Это связано с тем, что вектор не может заранее знать, сколько элементов будет добавлено в него, поэтому ему нужен динамически выделяемый массив в куче, который может быть изменен по мере добавления элементов.

Аватар пользователя
Гений
123456789101112
 #include <iostream> 
#include <vector> 
using namespace std; 
 
int main() 
{ 
	vector <int> f = { 1,2,3 }; //создаем вектор
	delete[] f.data(); //получаем указатель на его содержимое
и пытаемся удалить.
	cout << "ok"; //если увидели эту надпись значит указатель был выделен с помощью new[]. Т.е. в куче.
//Ну а в этом месте будет ошибка, потому что деструктор вектора попытается удалить то что мы уже удалили.
} 

В C++, `std::vector` хранит свой внутренний массив в куче (heap). `std::vector` - это динамический массив, который может изменять свой размер во время выполнения. Поэтому массив, хранимый внутри `std::vector`, не может быть размещен в стеке, так как размер стека определяется на этапе компиляции, до запуска программы. Вместо этого, массив выделяется с помощью оператора new и хранится в куче, а вектор содержит указатель на этот массив. После использования вектор должен быть освобожден с помощью оператора delete, чтобы избежать утечек памяти.

Аватар пользователя
Мастер

Вектор (vector) в C++ хранит свой внутренний массив в куче (heap). Когда вы создаете вектор, он выделяет некоторую начальную память в куче, которую можно расширять по мере необходимости при добавлении элементов в вектор.

Это позволяет вектору динамически изменять свой размер во время выполнения программы, без необходимости заранее определять максимальный размер. Кроме того, вектор обеспечивает автоматическое освобождение памяти, когда элементы удаляются или вектор уничтожается.

Важно отметить, что сам объект вектора, который хранит указатель на внутренний массив, находится в стеке (stack), так как он является локальной переменной. Однако, внутренний массив, на который указывает этот указатель, располагается в куче.

Аватар пользователя
Новичок

Хорошо