C ++中的数组和向量有什么区别?差异的一个例子可能包括图书馆、象征、能力等。
大批
数组包含特定类型的特定数量的元素。为了使编译器在编译程序时可以保留所需的空间量,您必须指定数组在定义时将包含的元素的类型和数量。编译器必须能够在编译程序时确定该值。一旦定义了数组,就可以使用数组的标识符和索引来访问数组的特定元素。 […] 数组是零索引的;也就是说,第一个元素在索引 0 处。这种索引方案表明 C++ 中指针和数组之间的密切关系以及语言为指针算术定义的规则。
— C++ 袖珍参考
向量
向量是一个动态大小的对象序列,提供数组样式
operator[]
随机访问。成员函数push_back
通过复制构造函数复制其参数,将该副本添加为向量中的最后一项,并将其大小增加一。pop_back
完全相反,通过删除最后一个元素。从向量末尾插入或删除项目需要摊销常数时间,从任何其他位置插入或删除需要线性时间。这些是向量的基础知识。他们还有很多。在大多数情况下,向量应该是 C 样式数组的首选。首先,它们是动态大小的,这意味着它们可以根据需要增长。您不必像 C 数组那样进行各种研究来确定最佳静态大小;矢量会根据需要增长,如果需要,可以手动将其大小调整为更大或更小。其次,向量使用at
成员函数(但不使用operator[]
)提供边界检查,因此如果您引用不存在的索引而不是简单地观看程序崩溃或更糟糕的是,继续使用损坏的数据执行。— C++ 食谱
原文由 Trancot 发布,翻译遵循 CC BY-SA 4.0 许可协议
数组:
malloc
分配的);sizeof
(因此常见的成语sizeof(arr)/sizeof(*arr)
,但是当无意中在指针上使用时会静默失败);std::vector
:&vec[0]
保证按预期工作);begin()
/end()
方法,通常的 STLtypedef
s,…)还要考虑数组的“现代替代方案” -
std::array
;我已经在 另一个答案 中描述了std::vector
和std::array
之间的区别,您可能想看看它。