STL的vector知识点大全

#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扩容,则原来的数据被释放,指向原来数据的迭代器就变成了野指针,所以迭代器失效了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值