STL中vector和array的比较
来源:互联网 发布:知乎删除问题 编辑:程序博客网 时间:2024/05/16 18:30
C++中数组与STL中vector和array的比较
版权声明:本博客参考文献来源于互联网,转载请备注原作链接,欢迎知识共享。
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解放出来。
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
- STL中vector和array的比较
- stl中vector和deque的比较
- 在STL 中 vector 和 list 的比较
- 微软vs stl中vector和list的效率比较
- 数组array和vector的比较
- STL中vector查找算法find()和find_if()深入比较
- c++ 的vector、array和数组的比较
- 4.5 数组,模板类vector和array的比较
- STL 中vector的reserve()和resize()
- STL中vector和list的使用
- stl的vector和list的push_back效率比较
- STL中比较常用的容器是vector,set和map,比较常用的算法有Sort等。
- C++ STL容器类vector,list和deque的比较
- 【STL】STL 中vector和list的使用
- 比较C++中数组,vector,array
- Java中Vector和Arraylist的比较
- c++中list和vector的比较
- c++中vector<int>和vector<int*>的用法比较
- Android函数响应式编程——必学的RxJava过滤操作符filter、elementAt、distinct、skip、take、ignoreElements、throttleFirst
- Effective STL学习笔记-条款45-50
- Python知识点(1)python基础 强制数据类型转换 小总结
- VS中删除以前增加的库文件
- 整数连接 HNUST 1544(贪心 字典序排列变形 string +sort )
- STL中vector和array的比较
- 线程
- 用两个线程玩猜数字游戏,第一个线程负责随机给出1~100之间的一个整数,第二个线程负责猜出这个数。要求每当第二个线程给出自己的猜测后,第一个线程都会提示“猜小了”、“猜大了”或“猜对
- bzoj 5090: 组题
- 进程与线程
- webkitdirectory 实现文件夹上传(包含文件夹大小和文件个数的校验)
- centos下的mysql修改登录密码过程
- SCI-HUB,就是打不死的小强,最新网址又出来了
- mysql---解决命令行无法退出问题