C ++对象的数据成员的最佳数组类型?

时间:2015-10-13 07:27:23

标签: c++ arrays

我最近开始学习C ++(已经有很多C经验)。

我简要地查看了vector<..>array<..>

我想知道C ++对象的数据成员的最佳数组类型是什么。请记住我想要封装,所以这个数据成员将是私有的 - 所以我需要getter和setter函数。

我知道数组的长度(长度将保持不变,因此不需要重新分配)。

传统的int array[100];会是最好的吗?

提前致谢! :)

2 个答案:

答案 0 :(得分:2)

当您在编译时知道数组的长度时,您应该使用array。您可能也会vector,但这可能会让某些人认为大小可能会发生变化(或者至少在编译时无法确定)。如果您正在使用大型数组且变量位于本地范围内,则无论如何都应考虑使用vector

使用int array[100];也可以作为替代方案,它有一些优点和一些缺点。

优点是它设置起来可能稍快一些(它可能比vector更快)并且你可以用经典的方式初始化它。另一个是,某些实现将允许经典数组具有可变长度决定实例化(我不认为它已成为标准,但它很容易支持),如果你当然接受依赖于支持这个的实现扩展

缺点是您无法轻松完全访问STL方法(您仍然可以通过std::beginstd::end获取数组的迭代器),但是如果创建为局部变量时,您必须使用堆栈空间来存储对象,而vector则需要为存储动态分配空间(array可能会使用堆栈空间)。

答案 1 :(得分:1)

既然你知道C语言,我会用这种语言给你一个类比。

使用

std::vector与C中使用的int* array = malloc(sizeof int * size)一样。如果数组很大并且您不希望拥有对象变大,则使用std::vector。如果您希望对象高效移动或可交换,这一点很重要。如果您考虑std::vector,请不要忘记评估std::deque

手动分配的动态数组优于std::vector

使用

std::array,就像在C中使用int array[100]数组一样。缺少单独的动态分配会使std::array的创建速度加快。如果您有许多包含小数组的对象,那么std::array可能是一个不错的选择。如果数组的大小不是常数或在编译时不知道,那么您不能使用std::array。在这种情况下,请改用std::vector

常规的C风格数组确实比std::array有一个小优势。当您使用大括号初始化它时,可以省略大小。使用std::array时,即使看起来多余,也必须指定大小。然而,这种稍微好一点的语法并没有超过std::array的优点。 std::array的一个显着优点是,与常规的C风格数组不同,它可以作为参数传递并按值返回。

因此,总而言之,阵列的最佳性取决于您的需求。在某些情况下,std::array更好,而其他std::vector则更好。在某些情况下,std::array根本不是一种选择。不需要C风格的替代品。