一.数组容器
数组容器包含vector, array, valarray
其中vector内存分配是动态分配(和string容器一样),而arrary的内存是固定的,定义多少就是多少。
下面主要介绍vector容器。
vector容器可以存放1. 基本数据类型(int,float,double等等,这里声明下,如果是char类型的,本质就和string容器一样了,所以可以直接使用string容器),2.结构体;3.指针,4对象。
二.vector容器开篇
#include<vector>
#include<iostream>
using namespace std;
void STLDefine()
{
vector<int> vec;
}
int main()
{
STLDefine();
system("pause");
return 0;
}
二 .vector容器的构造函数
1. 无参构造函数: vector<char>vec;
2.有参构造函数:vector<int>vec1(5);//输出5个0
vector<int>vec2(5,12);//输出5个12
vector<int>vec3(vec1);//这样vec3会输出vec1对象的5个0,注意只有参 数类型一样才能,否则会报错
3. 涉及到迭代器
vector<int>vec2(5,12);
vector<int>::iterator ite;
vector<int>::iterator ite1;
ite=vec2.begin()
ite1=vec2.end();
vector<int>vec3(ite,ite1);
for(int i=0;i<5;i++)
{
cout<<vec3[i];
}
三.vector容器的容量
1.初始容量
初始化几个,那么容量就是几个,无参数就是0;
这点和string容器不一样,string容器,系统会至少分配15个容量。
而当空间不够用时候,容量增加现有容量的一半。
VS版本例子:
vector<int>vec;
cout<<vec.capactity()<<endl;
vector<int>vec1(5);
cout<<vec.capacity()<<endl;
vec1.push_back(1);//5+5/2==7
cout<<vec1.capacity()<<endl;
vec1.push_back(1);
vec1.push_back(1); //7+7/2==10
cout<<vec1.capacity()<<endl;
2.reserve()修改容量
只能修改变大,不能变小;
vector<int>vec(5);
vec.reserve(10)//此时容量为10
注意:重新分配容量后,迭代器也会失效
3.size()元素个数,resize()重新设置元素个数
4.vector容器的输出
方式一:输出全部分为两种(循环,for_each)
vector<int>vec;
for(int i=0;i<10;i++)
{
vec.push_back(i);
} //往向量中添加0~9
vector<int>::iterator ite=vec.begin;
for(ite;ite!=vec.end();ite++)
{
cout<<*ite<<endl;//输出0~9
}
for_each(vec.begin(),vec.end(),fun);//其中fun函数自己需要定义,fun参数需要和vec中的函数类型一样
方式二:输出单个元素(at(),[]下标运算,back(), begin() )
5.vector()的增删改查
增加: insert() ; 尾部添加:void push_back();
删除: erase() ; 尾部删除: void pop_back() 等价于vec.erase(vec.end()) ;void clear()全部删除
修改: 利用输出的形式进行修改
赋值函数
交换: swap()
四.涉及的两个算法
算法一:排序算法
sort(vec.begin(),vec.end());//默认从小到大排序
算法二:遍历算法
for_each(vec.begin(),vec.end(),fun);
算法三:乱序算法
#include<ctime> //c语言中是time.h
#include<algorithm>
srand((unsigned int)time(0));
randon_shuffle(vec.begin(),vec.end(),fun);
备注: array表示数组(固定数组)不做介绍
valarrary这个容器装了一大堆容器封装,涉及到很多数学知识,不做介绍