一.介绍
是动态数组,是连续的空间,如果空间不够用,会申请一个更大的连续的空间,同时迭代器失效
头文件为#include< vector >;
二.构造函数
(为了方便省略< T >)
-
vector();
无参数的构造 -
vector(count);
n个元素,和数组类似 -
vector( n,elem );
用num个val来初始化容器
5个1
6个‘a’ -
vector( const vector &from );
拷贝构造
一定是同种类型元素的vector
用另一个vector对象初始化当前的vector对象 -
vector( begin,end );
构造函数将[a,b)区间元素拷贝给本身,注意该区间左开右闭
三.属性
(一)容量
Visual Studio定义对象的时候初始化几个,无参数就是零
容量不够时增加现有容量的一半。比如现有10个,新的就是15个,现有13个;增加13/2==6个,就是19个
VC++6.0
无参数就是0
容量不够时增加现有容量的一倍。比如现有10个,新的就是20个;现有20个,新的就是40个
reserve(); //可以提前预留空间以提高效率,
vector<int> v(10); //capacity为10,size也为10,里面放有元素,加数据要重新申请内存
vector<int>v;
v.reserve(10); //capacity为10但size为0,里面可以加数据
修改容量
不能变小,只能变大
设置多大就是多大
string 是有区间的 15-31-47-63…
(二)大小
size()
元素个数
resize()
重新设置元素个数
缩小时容量不变
放大时容量改变
empty()
对象是否有元素
vector<int>vec(6);
cout << vec.capacity() << endl; //6
cout << vec.size() << endl; //6
vec.reserve(11);
cout << vec.capacity() << endl; //11
用resize()改变超过capacity时capacity增加(capacity>=size)
vector<int>vec(6);
cout << vec.capacity() << endl;
cout << vec.size() << endl;
vec.reserve(11);
vec.resize(12);
cout << vec.capacity() << endl;
cout << vec.size() << endl;
四.操作
(一)查
for_each()
输出全部
循环
迭代器
at()
[ ]
下标运算
back()
返回尾巴的元素
front()
返回首元素
(二)增
- 尾增加
push_back() - 中间添加
insert( pos ,elem);
在pos位置插入elem元素
insert( ipos,n,elem);
在pos位置插入n个elem元素
insert( pos, beg,end );
在某个迭代器后加入另一个向量的中间一段
(三)删
-
尾删除
pop_back(); -
删除指定元素
erase( iterator loc );erase( iterator start, iterator end );
-
删除所有
clear();
(四)改
利用输出的形式可以修改
赋值函数(重新赋值,清除以前的)
assign(beg,end)
//将左开右闭区赋值给本身
assign(n,elem)
//将n个elem拷贝赋值
交换两个向量的内容
void swap( vector &from );
五.算法
(一)遍历
for_each(First, Last,fun );
参数三
有无返回值都行
参数是该容器的元素的类型
排序
void sort(First, Last );
从小到大
void sort( First, Last, greater< T >());
参数三 greater<>() 可以指定从大到小
乱序
函数random_shuffle()用来对一个元素序列进行重新排序(随机的)
#include<iostream>
#include<algorithm>
#include<vector>
#include<ctime>
#include<functional>
using namespace std;
void fun(int k)
{
cout << k << " ";
}
int main()
{
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
vec.push_back(5);
for (int i = 0; i < 10; i++)
{
srand((unsigned int)time(nullptr)); //产生种子,获取系统时间
random_shuffle(vec.begin(), vec.end());
for_each(vec.begin(), vec.end(), fun);
cout << endl;
}
system("pause");
return 0;
}
结果: