我花了一段时间才弄清楚如何创建一个我创建的数据结构的数组。我最终认为它必须是一个指针,但为什么?C++结构数组 - 为什么它必须是一个指针?
struct Food{
int weight;
double price;
string name;
};
Food *foods = new Food[5]; // Why a pointer?
我花了一段时间才弄清楚如何创建一个我创建的数据结构的数组。我最终认为它必须是一个指针,但为什么?C++结构数组 - 为什么它必须是一个指针?
struct Food{
int weight;
double price;
string name;
};
Food *foods = new Food[5]; // Why a pointer?
由于new[]
分配的内存块,并给你一个指针到内存中。在new Food[5]
的情况下,将有空间用于Food
类型的五个对象,每个对象都被构造。你得到的指针是五个对象中的第一个。
您还可以使用
Food foods[5];
创建一个数组。
然而,在C++来创建“阵列”的优选方式是使用任一std::array
或者如果你需要一个动态阵列(或需要它是在堆上)std::vector
:
std::array<Food, 5> foods; // Create a static fixed-size array of 5 Food objects
std::vector<Food> foods(5); // Create a dynamic, expandable array of 5 Food object
你再也Ť一定需要它是一个指针,则可以很容易地创建一个全局/本地阵列:
Food foods[5];
当在堆,阵列可以是可变参数长度:
Food *foods = new Food[std::rand() + 1];
但是你要删除它们为数组明确:
delete[] foods; // otherwise they leak
大部分是有意义的使用STL的容器中的时间:
#include <vector>
#include <array>
std::vector<Food> foods(5, cheezeburger()); // in case we need more cheeseburgers
std::array<Food, 5> foods; // in case five cheeseburgers should be enough for everyone
他们会为你做一切恼人的内存管理。
STL的自动指针也知道堆上的数组。
你可以提到std :: array或为什么要使用std :: vector over new [] –