Прежде всего, это не векторные объекты, это массивы времени компиляции. Одной из особенностей массивов времени компиляции является автоматическое управление памятью; то есть вам не нужно беспокоиться о распределении и освобождении этих массивов.
Если вы хотите создать массив, размер которого вы не знаете до времени выполнения, вам нужно использовать new[]
и delete[]
:
int size = somenumber;
int* arr = new int[size];
// use arr
arr[0] = 4;
// print the first value of arr which is 4
cout << arr[0];
Загвоздка в том, что после того, как вы закончите работу с этим массивом, вы должны освободить его:
delete[] arr;
Если вы забудете , чтобы освободить что-то, созданное new
с соответствующим delete
1 , вы создадите утечка памяти .
Возможно, вам лучше использовать std::vector
, потому что он автоматически управляет памятью:
// include the header
#include <vector>
using namespace std; // so we don't have std:: everywhere
vector<int> vec; // create a vector for ints
vec.push_back(4); // add some data
vec.push_back(5);
vec.push_back(6);
// vec now holds 4, 5, and 6
cout << vec[0]; // print the first element of vec which is 4
// we can add as many elements to vec as we want without having to use any
// deallocation functions on it like delete[] or anything
// when vec goes out of scope, it will clean up after itself and you won't have any leaks
1 Убедитесь, что вы используете delete
для указателей, которые вы создали с помощью new
и delete[]
для указателей, которые вы делаете с new[x]
. Не смешивать и не сопоставлять их . Опять же, если вы используете std::vector
, вам не нужно об этом беспокоиться.