20170608_STL 中vector 容器的一些常用函数,vector和数组的比较
2017-06-08 09:56
656 查看
20170608_STL 中vector 容器的一些常用函数
剑指offer——P37
1、数组是我们常见的一种简单的数据结构,它占据一块连续的内存空间,并且按照顺序依次存储。二维数组的话,则是“先行后列”的顺序,先依次存储每行元素,再依次存储每列元素。
创建数组时,我们必须明确说明数组的大小,然后编译器便会给它分配固定大小的内存空间,这都是预先分配好的,事后不能改变。因此,数组虽然可以根据下标有O(1)的很高的时间效率,但是它的空间效率并没有得到充分利用。
2、由此,我们可以根据数组的时间效率很高的情况,引申出 “使用数组构造简单的哈希表” 。
我们可以把数组的下标作为哈希表的 “关键字”,而把数组中的每一个元素当作对应的 “哈希值”,这样的话,数组的下标和数组中对应元素便构成了 “关键字—值” 对儿。
有了这样的哈希表,我们也可以在O(1) 时间内实现高效率查找。
3、为了解决数组空间利用率不高的情况,在C++11新标准中提出了 “动态数组”
的概念。其中,vector 便是STL 中比较常用的一个容器——可变大小数组。
为了避免空间浪费,vector 总是先开辟一块较小的内存空间,然后按照需求依次往vector 中添加元素。而一旦当元素的数量大于目前vector 的容量时,编译器便会自动的再分配一块更大的内存空间,也就是自动扩容(vector 每次自动扩容的时候,新的容量总是前一次的2倍!),把之前的数据元素统统复制到新的vector
空间内,然后再把之前的内存空间释放掉,这样就能减少内存的浪费。
<
4000
p>但是,我们也注意到了,在每次扩容的时候,都进行了大量的额外操作——复制元素和释放原来的内存空间,这会对时间性能有一定的影响。因此,在使用动态数组的时候,应该减少改变容器容量的次数。
4、vector 中:
size()函数:当前vector 中所实际存储的元素的数量。
capacity()函数:在没有进行扩容之前,当前vector 所能够存储的元素的数量,也就是当前vector的容量。
shrink_to_fit()函数:使得当前vector的容量缩小至size()大小,但是它的size()不变。
resize(1024)函数:使得当前vector 容量变成1024。size()和capacity()均变成1024。
另外:
1. push_back() 在数组的最后添加一个数据
2. pop_back() 去掉数组的最后一个数据
3. at() 得到编号位置的数据
4. begin() 得到数组头的指针
5. end() 得到数组的最后一个单元+1的指针
6. front() 得到数组头的引用
7. back() 得到数组的最后一个单元的引用
8. max_size() 得到 vector 最大可以是多大
9. capacity() 当前 vector 被分配空间的大小
10. size() 当前使用数据的大小
11. resize() 改变当前使用数据的大小,如果它比当前使用的大,则填充默认值
12. reserve() 改变当前 vecotr 所分配空间的大小
13. erase() 删除指针指向的数据项
14. clear() 清空当前的 vector
15. rbegin() 将 vector 反转后的开始指针返回 ( 其实就是原来的end-1 )
16. rend() 将 vector 反转构的结束指针返回 ( 其实就是原来的begin-1 )
17. empty() 判断 vector 是否为空
18. swap() 与另一个 vector 交换数据
剑指offer——P37
1、数组是我们常见的一种简单的数据结构,它占据一块连续的内存空间,并且按照顺序依次存储。二维数组的话,则是“先行后列”的顺序,先依次存储每行元素,再依次存储每列元素。
创建数组时,我们必须明确说明数组的大小,然后编译器便会给它分配固定大小的内存空间,这都是预先分配好的,事后不能改变。因此,数组虽然可以根据下标有O(1)的很高的时间效率,但是它的空间效率并没有得到充分利用。
2、由此,我们可以根据数组的时间效率很高的情况,引申出 “使用数组构造简单的哈希表” 。
我们可以把数组的下标作为哈希表的 “关键字”,而把数组中的每一个元素当作对应的 “哈希值”,这样的话,数组的下标和数组中对应元素便构成了 “关键字—值” 对儿。
有了这样的哈希表,我们也可以在O(1) 时间内实现高效率查找。
3、为了解决数组空间利用率不高的情况,在C++11新标准中提出了 “动态数组”
的概念。其中,vector 便是STL 中比较常用的一个容器——可变大小数组。
为了避免空间浪费,vector 总是先开辟一块较小的内存空间,然后按照需求依次往vector 中添加元素。而一旦当元素的数量大于目前vector 的容量时,编译器便会自动的再分配一块更大的内存空间,也就是自动扩容(vector 每次自动扩容的时候,新的容量总是前一次的2倍!),把之前的数据元素统统复制到新的vector
空间内,然后再把之前的内存空间释放掉,这样就能减少内存的浪费。
<
4000
p>但是,我们也注意到了,在每次扩容的时候,都进行了大量的额外操作——复制元素和释放原来的内存空间,这会对时间性能有一定的影响。因此,在使用动态数组的时候,应该减少改变容器容量的次数。
4、vector 中:
size()函数:当前vector 中所实际存储的元素的数量。
capacity()函数:在没有进行扩容之前,当前vector 所能够存储的元素的数量,也就是当前vector的容量。
shrink_to_fit()函数:使得当前vector的容量缩小至size()大小,但是它的size()不变。
resize(1024)函数:使得当前vector 容量变成1024。size()和capacity()均变成1024。
#include<iostream> #include<vector> #include<algorithm> using namespace std; int main(void) { int n[]={1,2,3,4,5,6,7,8,9,10}; vector<int> ivec(begin(n),end(n)); //vector<int> ivec(1024); int num1=ivec.size(); //num1=10 int num2=ivec.capacity(); //num2=10 cout<<num1<<","<<num2<<endl; for(int i=50; i<100; ++i) ivec.push_back(i); int num3=ivec.size(); //num3=60=50+10 int num4=ivec.capacity(); //num4=73 cout<<num3<<","<<num4<<endl; ivec.shrink_to_fit(); cout<<ivec.size()<<","<<ivec.capacity()<<endl; //60,60 ivec.resize(100); cout<<ivec.size()<<","<<ivec.capacity()<<endl; //100,100 system("pause"); return 0; }
另外:
1. push_back() 在数组的最后添加一个数据
2. pop_back() 去掉数组的最后一个数据
3. at() 得到编号位置的数据
4. begin() 得到数组头的指针
5. end() 得到数组的最后一个单元+1的指针
6. front() 得到数组头的引用
7. back() 得到数组的最后一个单元的引用
8. max_size() 得到 vector 最大可以是多大
9. capacity() 当前 vector 被分配空间的大小
10. size() 当前使用数据的大小
11. resize() 改变当前使用数据的大小,如果它比当前使用的大,则填充默认值
12. reserve() 改变当前 vecotr 所分配空间的大小
13. erase() 删除指针指向的数据项
14. clear() 清空当前的 vector
15. rbegin() 将 vector 反转后的开始指针返回 ( 其实就是原来的end-1 )
16. rend() 将 vector 反转构的结束指针返回 ( 其实就是原来的begin-1 )
17. empty() 判断 vector 是否为空
18. swap() 与另一个 vector 交换数据
相关文章推荐
- STL中比较常用的容器是vector,set和map,比较常用的算法有Sort等。
- 《我的第一本c++书》学习笔记:STL之vector容器的常用操作函数
- STL 笔记(一) 顺序容器 vector、list、deque常用函数
- 比较常用的一些数组操作函数 mysql函数
- STL常用容器,以及一些函数
- Qt开发中字符串、字节数组和变量常用的一些函数总结
- stl标准容器的常用函数
- STL序列容器 vector, list, deque的比较
- stl 常用函数(包括vector list stack queue)
- STL基础4:STL7个常用容器的比较
- STL基础4:STL7个常用容器的比较
- sql 函数大全 比较常用的一些函数整理第1/2页
- C++STL中vector容器 assign()函数的用法
- STL中容器的常用函数
- 我对STL的一些看法(二)认识vector容器
- STL常用容器简介 vector deque list map set
- STL一些常用的容器和算法--总结
- STL中常用的一些算法函数[持续更新]
- stl中各种容器的自定义比较函数
- Qt开发中字符串、字节数组和变量常用的一些函数总结