STL中vector和array的比较
2017-12-09 20:41
218 查看
C++中数组与STL中vector和array的比较
标签: C++STL2017-03-29 18:43 1841人阅读 评论(0) 收藏 举报
分类:
【C/C++开发】(17)
版权声明:本博客参考文献来源于互联网,转载请备注原作链接,欢迎知识共享。
ref:http://m.blog.csdn.net/article/details?id=49848169
在c++11中,STL中提拱了一个新的容器std::array,该容器在某些程度上替代了之前版本的std::vector的使用,更可以替代之前的自建数组的使用。那针对这三种不同的使用方式,先简单的做个比较:
相同点:
1. 三者均可以使用下表运算符对元素进行操作,即vector和array都针对下标运算符[]进行了重载
2. 三者在内存的方面都使用连续内存,即在vector和array的底层存储结构均使用数组
不同点:
1. vector属于变长容器,即可以根据数据的插入删除重新构建容器容量;但array和数组属于定长容量。
2. vector和array提供了更好的数据访问机制,即可以使用front和back以及at访问方式,使得访问更加安全。而数组只能通过下标访问,在程序的设计过程中,更容易引发访问 错误。
3. vector和array提供了更好的遍历机制,即有正向迭代器和反向迭代器两种
4. vector和array提供了size和判空的获取机制,而数组只能通过遍历或者通过额外的变量记录数组的size
5. vector和array提供了两个容器对象的内容交换,即swap的机制,而数组对于交换只能通过遍历的方式,逐个元素交换的方式使用
6. array提供了初始化所有成员的方法fill
7. vector提供了可以动态插入和删除元素的机制,而array和数组则无法做到,或者说array和数组需要完成该功能则需要自己实现完成
8. 由于vector的动态内存变化的机制,在插入和删除时,需要考虑迭代的是否失效的问题。
基于上面的比较,在使用的过程中,可以将那些vector或者map当成数组使用的方式解放出来,可以直接使用array;也可以将普通使用数组但对自己使用的过程中的安全存在质疑的代码用array解放出来。
[cpp] view
plain copy
print?
//比较数组、vector、array
#include <iostream>
#include <vector>
#include <array>
#include <iomanip>
using namespace std;
int main(void)
{
/*1.构造方式
* vector:有多种构造方式,不需要定义元素个数;除常见的初始化方式外,还可以
* 通过vector和数组构造新的vector
* array:定义时必须指定array的大小,可通过array构造新的array,不可使用数组构造
* 数组:定义时必须指定array的大小,使用{}初始化
*/
vector<int> myvector = {1,2,3,4,5};
array<int, 5> myarray = {1,2,3,4,5};
int myint[5] = { 1, 2, 3, 4, 5 };
/*2.访问方式
* 三者均可通过下标运算符[]对元素进行操作,vector和array还可以通过at/front/back进行操作
*/
cout << setw(10) << "vector" << setw(10) << "array" << setw(10) << "数组" << endl;
for (int i = 0; i < 5; i++)
{
cout << setw(10) << myvector.at(i) << setw(10) << myarray.at(i) << setw(10) << myint[i] << endl;
}
/*3.遍历方式
* vector和array还可以通过正向和反向迭代器对元素进行遍历
*/
cout << "=============正向迭代器遍历=========="<< endl;
for (vector<int>::iterator it = myvector.begin(); it != myvector.end();++it)
{
cout << *it << endl;
}
cout << "=============反向迭代器遍历==========" << endl;
for (vector<int>::reverse_iterator it = myvector.rbegin(); it != myvector.rend(); ++it)
{
cout << *it << endl;
}
/*4.增删元素
* vector可以通过push_back/pop_back/emplace/emplace_back/insert动态增删元素
* array和数组无法实现动态增删元素
*/
myvector.push_back(6);
myvector.emplace_back(7);
vector<int>::iterator it = myvector.end();
myvector.insert(it, { 8, 9 });//在尾部插入元素,可通过it改变插入位置,也可以插入多个元素
myvector.pop_back();
cout << "=============动态增删元素==========" << endl;
for (vector<int>::iterator it = myvector.begin(); it != myvector.end(); ++it)
{
cout << *it << endl;
}
return 0;
}
输出结果:
STL:array/vector/list比较
Function | array | vector | list |
constructor | no | yes | yes |
destructor | no | yes | yes |
empty() | yes | yes | yes |
size() | yes | yes | yes |
resize() | no | yes | yes |
capacity() | no | yes | no |
reserve() | no | yes | no |
max_size() | yes | yes | yes |
erase() | no | yes | yes |
clear() | no | yes | yes |
operator= | yes | yes | yes |
operator< | yes | yes | yes |
operator== | yes | yes | yes |
operator[] | yes | yes | no |
at() | yes | yes | no |
front() | yes | yes | yes |
back() | yes | yes | yes |
push_back() | no | yes | yes |
pop_back() | no | yes | yes |
assign() | yes | yes | yes |
insert() | no | yes | yes |
swap() | yes | yes | yes |
push_front() | no | no | yes |
pop_front() | no | no | yes |
merge() | no | no | yes |
remove() | no | no | yes |
remove_if() | no | no | yes |
reverse() | no | no | yes |
sort() | no | no | yes |
splice() | no | no | yes |
unique() | no | no | yes |
ref:http://m.blog.csdn.net/article/details?id=49848169
相关文章推荐
- C++中数组与STL中vector和array的比较
- (原創) 如何将array转成std::vector? (使用vector.insert) (C/C++) (STL)
- C++ STL容器类vector,list和deque的比较
- STL系列(6):vector list deque比较
- STL容器类vector,list,deque的比较
- C++ 数组array与vector的比较
- 微软vs stl中vector和list的效率比较
- C++ 数组array与vector的比较
- STL vector+sort排序和multiset/multimap排序比较
- STL中比较常用的容器是vector,set和map,比较常用的算法有Sort等。
- 【vc】【STL源码】vector,deque与sort的用法比较及入门
- c++的STL模板库中3种容器类:vector,list,deque的比较
- std::vector与std::list的执行速度比较 (C/C++) (STL)
- STL vector+sort排序和multiset/multimap排序比较
- C++ stl vector不同遍历方式性能比较
- 4.5 数组,模板类vector和array的比较
- STL序列容器vector、deque、list和array学习笔记
- STL序列容器 vector, list, deque的比较
- 关于Vector 和Array的比较
- c++ 的vector、array和数组的比较