C ++中的结构和数组之间是否有任何相似之处?
我想知道这样的问题,因为两者都是不同的,因为一个是用户定义的数据类型,另一个是具有连续内存位置存储的派生数据类型。
答案 0 :(得分:3)
结构和数组有一些共同之处,但通常认为它们在概念上是分开的。您可能能够使用其中任何一种情况的一种情况是,如果要存储已知数量的所有相同类型的变量。
如果您存储的数据是一个系列,其中每个值在某些不同的上下文中具有相同的含义,我建议使用数组;如果每个值具有不同的含义,我建议使用结构。
E.g。
您希望存储一周的一系列最高温度值。每个值的含义都相同,都是最高温度,因此您使用数组:
std::array<int, 7> week_max_temperatures;
您希望存储一天的最高和最低温度以及总降雨量。每个值的类型相同,int
,但含义不同,因此您使用结构来避免混淆最低温度,最高温度和降雨量:
struct DailyWeatherData
{
int max_temperature_deg_c;
int min_temperature_deg_c;
int total_rainfall_mm;
};
以下列出了它们的相同点和不同点:
的Structs:
operator=()
进行复制(除非通过复制构造函数删除或包含不可复制的成员禁止)。new
分配。如果是后者那么你负责内存管理。C风格的数组:
std::copy
或memcpy
,而非operator=()
。new[]
分配。如果是后者那么你负责内存管理。在任何一种情况下,数组变量都像指向实际数据的指针一样。operator=()
进行复制。new
进行分配,因此内存管理不是问题。operator=()
进行复制。