我最近开始学习C ++(已经有很多C经验)。
我简要地查看了vector<..>
和array<..>
。
我想知道C ++对象的数据成员的最佳数组类型是什么。请记住我想要封装,所以这个数据成员将是私有的 - 所以我需要getter和setter函数。
我知道数组的长度(长度将保持不变,因此不需要重新分配)。
传统的int array[100];
会是最好的吗?
提前致谢! :)
答案 0 :(得分:2)
当您在编译时知道数组的长度时,您应该使用array
。您可能也会vector
,但这可能会让某些人认为大小可能会发生变化(或者至少在编译时无法确定)。如果您正在使用大型数组且变量位于本地范围内,则无论如何都应考虑使用vector
。
使用int array[100];
也可以作为替代方案,它有一些优点和一些缺点。
优点是它设置起来可能稍快一些(它可能比vector
更快)并且你可以用经典的方式初始化它。另一个是,某些实现将允许经典数组具有可变长度决定实例化(我不认为它已成为标准,但它很容易支持),如果你当然接受依赖于支持这个的实现扩展
缺点是您无法轻松完全访问STL方法(您仍然可以通过std::begin
和std::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风格的替代品。