Я пытаюсь инициировать 3d-вектор в C++. Я хочу, чтобы это изначально было 100 на 100 на 1, но у меня проблемы. (Я знаю, что это 2d в основном, но я буду изменять размер вектора оси z позже.)Инициализация 3d-векторов C++
У меня есть класс Entity, который должен содержать указатель на. Я правильно включил заголовки Entity, но он все еще не работает. Вот что я пытаюсь сделать:
vector <vector <vector <Entity* > > > matrix (100, vector < vector < Entity* > > (100,vector<Entity*> (1, NULL)));
Ошибка компилятора - это «ожидаемый идентификатор перед численной константой». Я проверил внимательно, и нет недостающих точек с запятой или чего-то еще до этой строки. Если я удалю эту строку, код будет компилироваться чисто.
Это непосредственно после строки «private:» в определении функции. Могут ли переменные-члены принимать конструкторы? Я также попытался поставить только
vector <vector <vector <Entity* > > > matrix;
в файле .h и
matrix (100, vector < vector < Entity* > > (100,vector<Entity*> (1, NULL)));
в конструкторе в файле .cpp, но не работал ни (не подходит для вызова, а также недействительным преобразование INT в Entity *)
Какой самый лучший способ объявить 3d «вектор» этого (особенно в классе?)
Спасибо!
Поймите, что вы получите ужасную локальность данных из-за отдельных распределений. Если производительность становится проблемой, рассмотрите один большой вектор и вручную вычислите смещения. Кроме того, предпочитайте 'std :: unique_ptr' или' std :: shared_ptr' для сырых указателей, если вектор «владеет» каждым элементом. –
Есть ли проблемы с памятью с использованием 2d массива векторов? – Nathan
Это не о том, как * много * памяти вы используете, речь идет о * где *, что выделена память. Каждый вектор выделяет свою собственную кучу памяти, а это означает, что итерация по ним приведет к тому, что вы окажетесь в памяти (и, таким образом, получите много промахов в кэше). Тем не менее, убедитесь, что это на самом деле проблема для вас в первую очередь. –