#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int arr[]={1,2,3,4,5};
vector<int>v(arr,arr+5);
for(int i=0;i<5;i++)
cout<<v[i]<<" ";//V的值:1 2 3 4 5
cout<<endl;
vector<int> v1(v);
for(int i=0;i<5;i++)
cout<<v1[i]<<" ";//v1的值:1 2 3 4 5
cout<<endl;
vector<int>v2(3,10);
for(int i=0;i<3;i++)
cout<<v2[i]<<" ";//v2的值:10 10 10
cout<<endl;
vector<int>vecIntA,vecIntB,vecIntC,vecIntD;
vecIntA.assign(arr,arr+5);
for(int i=0;i<vecIntA.size();i++)
cout<<vecIntA[i]<<" ";//vecIntA的值:1 2 3 4 5
cout<<endl;
vecIntB.assign(vecIntA.begin(),vecIntA.end());
for(int i=0;i<vecIntB.size();i++)
cout<<vecIntB[i]<<" ";//vecIntB的值:1 2 3 4 5
cout<<endl;
vecIntB.assign(vecIntA.begin()+2,vecIntA.end()-1);
for(int i=0;i<vecIntB.size();i++)
cout<<vecIntB[i]<<" ";//打印vecIntA的第三个值和倒数第二个值:3 4
cout<<endl;
vecIntC.assign(4,10);//打印四个10
for(int i=0;i<vecIntC.size();i++)
cout<<vecIntC[i]<<" ";//vecIntC的值:10 10 10 10
cout<<endl;
vecIntB.swap(vecIntC);//交换内容
for(int i=0;i<vecIntB.size();i++)
cout<<vecIntB[i]<<" ";//vecIntB的值:10 10 10 10
cout<<endl;
for(int i=0;i<vecIntC.size();i++)
cout<<vecIntC[i]<<" ";//vecIntC的值:3 4
cout<<endl;
vecIntD=vecIntC;//vecIntC的值赋给了VECIntD
for(int i=0;i<vecIntD.size();i++)
cout<<vecIntD[i]<<" ";//vecIntD的值:3 4
cout<<endl;
vector<int>creatvector;
cout<<"creatvector的容器元素的个数:"<<creatvector.size()<<endl;//creatvector的容器元素的个数:0
if(creatvector.empty()){//容器空为真
cout<<"creatvector is empty"<<endl;//creatvector is empty
}else{
cout<<"creatvector isn't empty"<<endl;
}
int iarry[]={0,1,2,3,4};
creatvector.assign(iarry,iarry+5);//使用assign函数,会把原来容器的数据清空
creatvector.resize(10);//将容器的长度变长
for(int i=0;i<creatvector.size();i++)
cout<<creatvector[i]<<" ";//0 1 2 3 4 0 0 0 0 0
cout<<endl;
//vector的扩容/减容
creatvector.resize(3);//将容器长度变短
creatvector.resize(10,100);//将容器剩余的部分补100,容器长度为10;假如creatvector容器里面有10个元素,这行代码不会起作用
for(int i=0;i<creatvector.size();i++)
cout<<creatvector[i]<<" ";//0 1 2 100 100 100 100 100 100 100
cout<<endl;
/*vector的动态扩容机制为:一般分配原空间的二倍新空间,然后把数据拷贝过去
*
*/
//vector的插入/删除
int a[]={1,2,3,4};
vector<int>A(a,a+4);
for(int i=0;i<A.size();i++)
cout<<A[i]<<" ";//1 2 3 4
A.push_back(10);//尾部插入10
A.push_back(11);//尾部插入11
for(int j=0;j<A.size();j++)
cout<<A[j]<<" ";//1 2 3 4 1 2 3 4 10 11
cout<<endl;
A.pop_back();//删除尾部的数
for(int j=0;j<A.size();j++)
cout<<A[j]<<" ";//1 2 3 4 10
cout<<endl;
//在指定位置插入一个指定元素
A.insert(v.begin()+3,100);//第一个参数不能为下标,应该为指针
for(int i=0;i<A.size();i++)
cout<<v[i]<<" ";//1 2 3 100 4 5
cout<<endl;
//在特定位置插入多个元素
A.insert(A.begin()+3,3,100);
for(int i=0;i<A.size();i++)
cout<<A[i]<<" ";//1 2 3 100 100 100 4 10
cout<<endl;
//将指定区间的元素插入指定的容器位置里
int Appoint[]={40,50,60,70,80,90};
A.insert(A.begin()+7,Appoint+1,Appoint+5);
for(int i=0;i<A.size();i++)
cout<<A[i]<<" ";//1 2 3 100 100 100 4 50 60 70 80 10(将Appiont数组中的50 60 70插入到A容器中)
cout<<endl;
//迭代器
vector<int>::iterator iter=v.begin();//若v不为空,iter指向v[0]
++iter;//使迭代器自增指向下一个元素
vector<int>vecIntE;
int b[]={100,1,20,30,40};
vecIntE.assign(b,b+5);
vector<int>::iterator it1;//构造一个迭代器对象
it1=vecIntE.begin();//使迭代器指向vecIntE容器的第一个元素
cout<<*it1<<" ";//100 1 20 30 40
cout<<endl;
it1=vecIntE.begin();
it1=it1+2;
cout<<*it1<<endl;//20
cout<<endl;
it1=it1-2;
cout<<*it1<<endl;//100
cout<<endl;
/*补充:vector元素的访问
* vec.at[number],返回索引number所指的数据,如果number遇界,抛出out_of_rang异常
* vec[number],返回索引所指的数据,越界时,运行直接报错
* 一般都会用vec.at[number]进行元素的访问·
*/
return 0;
}
vector<int>v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
vector<int>::iterator itt=v.begin()+3;
v.insert(itt,8);//insert会返回一个新的有效迭代器
cout<<*itt<<endl;//可能为0,不同的编译器运行结果不一样;不是9,因为迭代器失效了;
//解释:插入一个元素可能导致v这个容器整体搬迁,有就是把原来的空间释放了,拷贝到新的空间上了
//如果想让结果为8,需要这样写:itt=v.insert(itt,8);
扩展:在insert时,vector可能要扩容,而扩容的本质是new一块新的空间,再将数据迁移过去;而我们知道,迭代器的内部是通过指针当问容器中的元素的,而插入后,若vector扩容,则原来的数据被释放,指向原来数据的迭代器就变成了野指针,所以迭代器失效了