c++ std::vector和std::array区别

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/xiangxianghehe/article/details/102564414

出处:https://stackoverflow.com/questions/4424579/stdvector-versus-stdarray-in-c

我把他们核心区别的几个单词用加黑标注出来了,原文很容易读懂理解,就不做翻译了。

英文原文:

std::vector is a template class that encapsulate a dynamic array, stored in the heap, that grows and shrinks automatically if elements are added or removed. It provides all the hooks (begin(), end(), iterators, etc) that make it work fine with the rest of the STL. It also has several useful methods that let you perform operations that on a normal array would be cumbersome, like e.g. inserting elements in the middle of a vector (it handles all the work of moving the following elements behind the scenes).

Since it stores the elements in memory allocated on the heap, it has some overhead in respect to static arrays.

std::array is a template class that encapsulate a statically-sized array, stored inside the object itself, which means that, if you instantiate the class on the stack, the array itself will be on the stack. Its size has to be known at compile time (it’s passed as a template parameter), and it cannot grow or shrink.

It’s more limited than std::vector, but it’s often more efficient, especially for small sizes, because in practice it’s mostly a lightweight wrapper around a C-style array. However, it’s more secure, since the implicit conversion to pointer is disabled, and it provides much of the STL-related functionality of std::vector and of the other containers, so you can use it easily with STL algorithms & co. Anyhow, for the very limitation of fixed size it’s much less flexible than std::vector.

猜你喜欢

转载自blog.csdn.net/xiangxianghehe/article/details/102564414