#include"vector"
#include"iostream"
#include"algorithm"
#include"ctime"
using namespace std;
void fun(int a){
cout<<a*a<<endl;
}
void STLConstructor(){
vector<int> vec1;
//cout<<vec1;
vector<int> vec2(5,2);
vector<int>::iterator ite = vec2.begin();
cout<<".............."<<endl;
cout<<*ite;
cout<<".............."<<endl;
for(int i = 0;i<vec2.size();i++){
cout<<vec2[i];
}
cout<<".............."<<endl;
for(int i = 0;i<vec2.size();i++){
cout<<*ite;
ite++;
}
cout<<".............."<<endl;
ite = vec2.begin();
for(ite;ite!=vec2.end();ite++){
cout<<*ite;
}
cout<<".............."<<endl;
for_each(vec2.begin(),vec2.end(),fun);
cout<<".............."<<endl;
cout<<vec2[0]<<endl;
cout<<".............."<<endl;
vector<int>vec3(vec2);
for_each(vec3.begin(),vec3.end(),fun);
cout<<".............."<<endl;
vector<int>vec4(vec2.begin(),vec2.end());
vector<int>::iterator vecIte = vec4.insert(vec4.begin(),100);
vec4.insert(vec4.begin(),2,5);
vec4.insert(vec4.begin(),vec2.begin(),vec2.end());
for_each(vec4.begin(),vec4.end(),fun);
}
void STLCapacity(){
vector<int> vec1;
cout<<vec1.capacity()<<endl;
vector<int> vec2(5);
cout<<vec2.capacity()<<endl;
vec2.push_back(1);
cout<<vec2.capacity()<<endl;// 5+5/2
vec2.push_back(1);
vec2.push_back(1);
cout<<vec2.capacity()<<endl;// 7+7/2 每次增加现有空间的一半(取整)
//vc6.0是以2倍的容量逐渐增长的
vector<int> vec3(20);
cout<<vec3.capacity()<<endl;
cout<<".........................."<<endl;
vector<int>vec4;
vec4.reserve(10);
vec4.reserve(2);
cout<<vec4.capacity()<<endl;//只能改大,不能改小
//重新分配容量后,迭代器会失效(因为他们重新申请空间了)
cout<<".........................."<<endl;
vector<int>vec5(1);
vector<int>::iterator ite1 = vec5.begin();
cout<<*ite1<<endl;
vec5.reserve(10);
ite1 = vec5.begin();//这一步必须存在,因为重新分配了空间,所以迭代失效了
cout<<*ite1<<endl;
/*
resize 函数在vector中
要重新设置的大小为:a
当前的大小为:b
若:a<=b,则capacity=b
若:b<a<=1.5*b,则capacity=1.5*b
若:a>1.5*b,则capacity=a
可以参考链接:https://blog.csdn.net/ChaoFeiLi/article/details/103116198
*/
cout<<".........................."<<endl;
vector<int> vec6(2);
vec6.resize(4);
cout<<vec6.capacity()<<endl;
for_each(vec6.begin(),vec6.end(),fun);
}
void STLDO(){
vector<int> vec1;
for(int i = 0;i<10;i++){
vec1.push_back(i);
}
for(int i = 0;i<vec1.size();i++){
cout<<vec1.at(i)<<endl;//采用at输出,或者下标[]
}
cout<<vec1.back()<<endl;
vector<int>::iterator ite = vec1.begin();
for(ite;ite!=vec1.end();ite++){
cout<<*ite<<endl;
}
for_each(vec1.begin(),vec1.end(),fun);
}
void STLADD(){
vector<int> vec1;
for(int i = 0;i<10;i++){
vec1.push_back(i);
}
//vec1.insert(vec1.begin()+1,15);
//vec1.insert(vec1.begin()+1,15,2);
for_each(vec1.begin(),vec1.end(),fun);
cout<<"............."<<endl;
vec1.pop_back();//尾部删除元素
for_each(vec1.begin(),vec1.end(),fun);
cout<<"............."<<endl;
vector<int>::iterator ite1 = vec1.erase(vec1.begin()+3);//返回删除数据之后,重新填补进入的数据指针
for_each(vec1.begin(),vec1.end(),fun);
cout<<"............."<<endl;
cout<<(*ite1)*(*ite1)<<endl;
cout<<"............."<<endl;
//排序
vector<int> vec2;
for(int i = 10;i>1;i--){
vec2.push_back(i);
}
cout<<"开始时容量大小:";
cout<<vec2.capacity()<<endl;
sort(vec2.begin()+3,vec2.end());//排序不一定非得从头开始排序,也可以对中间进行排序
for_each(vec2.begin(),vec2.end(),fun);
cout<<"............."<<endl;
//清空
vec2.clear();//全部清空
cout<<"清空时容量大小:";
cout<<vec2.capacity()<<endl;
for_each(vec2.begin(),vec2.end(),fun);
//赋值 采用at,或者[],或者assign
///vec2.assign(vec1.begin(),vec1.end());
cout<<vec2.capacity()<<endl;
vec2.assign(10,10);
for_each(vec2.begin(),vec2.end(),fun);
cout<<"重新赋值后容量大小:";
cout<<vec2.capacity()<<endl;
//打乱
vector<int> vec3;
for(int i = 0;i<10;i++){
vec3.push_back(i);
}
srand((unsigned int)time(0));
random_shuffle(vec3.begin(),vec3.end());
for_each(vec3.begin(),vec3.end(),fun);
}
int main(){
//STLDefine();
//STLConstructor();
//STLCapacity();
//STLDO();
STLADD();
system("pause");
return 0;
}