vector相关的学习整理

5 篇文章 0 订阅
3 篇文章 0 订阅
#include <iostream>

using namespace std;

#include<vector>



int main()

{

    /*vector构造函数 初始化4种*/

    vector<int> a;          //第一种:a为空,什么也没有

    vector<int> b(4,100);   //第二种:初始化为连续4个100;

                            //输出为100 100 100 100

    vector<int> b1(4);      //会默认为4个0

    vector<int> c(b.begin(),b.end());   //第三种:参数类型为迭代器这种相当于把b的开始到结束给c,输出为100 100 100 100

                                          //也可以这么写:vector<int> c(b.begin()+2,b.end());输出为100 100



    vector<int> d(c);       //以另一个对象做初始化,输出跟c一样



    int e[]={16,2,77,28};

    vector<int> f(e,e+sizeof(e)/sizeof(int));//使用数组做初始化,第一个参数为起始地址,第二个参数为数组末地址

                                            //输出结果跟数组e一样。



    return 0;

}







int main ()

{

/******************************************************

*关于vector的

*    size()、iterator、begin()、end()函数

*   用法的笔记

*

******************************************************/



    vector<int> first(4,10);//初始化为4个10

    int i=first.size();//求得first里面共有几个数

    cout<<i<<endl;//会输出4



    first.begin();//返回值的类型是iterator(迭代器),类似指针

    //接收返回值的时候必须定义 vector<int>::iterator ite这种类型

    vector<int>::iterator ite=first.begin();//返回的是第一个数

    cout<<*ite<<endl;//输出必须加*,否则报错

    ite++;//会接着访问下一个数;也可以ite+=2;当然也可以--ite;

    first.end();

    //基本和first.begin()相同,不过他返回的并不是容器中最后一个数

    ite=first.end();//返回的是最后一个数的下一个,一个未知数

    ite--;

    cout<<*ite<<endl;//输出的是最后一个数

  return 0;

}









int main ()

{

    /************************************

    *关于vector的empty,push_back(),pop_back()

    *                               介绍

    ************************************/

    vector<int> myvector;



    myvector.empty();//判断容器是否是空,若是空的返回true,否则返回false;

    bool flag=myvector.empty();

    cout<<flag<<endl;//输出1



    for(int i=1;i<=10;i++)

        myvector.push_back(i);//每次会向容器末尾添加一个数字i



    for(int i=0;i<myvector.size();++i)//结果是1~10这10个数字

        cout<<myvector[i]<<" ";



    myvector.pop_back();//会移除容器中末尾的值,少了一个10



    myvector.assign (7,100);//会重新初始化容器,不管以前是啥,都会变成7个10

    cout<<endl;

    for(int i=0;i<myvector.size();++i)//结果是7个100

        cout<<myvector[i]<<" ";

    return 0;

}





int main ()

{

    /********************************

    *关于vector的at(),back(),capacity()

    *                              介绍

    *********************************/

    vector<int> myvector (10);//初始化10个0



    for (unsigned i=0; i<myvector.size(); i++)

        myvector.at(i)=i;//改变容器下标i所对应的值



    for (unsigned i=0; i<myvector.size(); i++)//输出0~9

        cout << ' ' << myvector.at(i);

    cout << '\n';



    myvector.back();//返回最后一个元素

    cout<<myvector.back()<<endl;//输出9





    cout<<myvector.size()<<'\t';//size求的是实际有多少个数

    //capacity()计算的是真实的容量,比如申请了5个空间,放了3个数,size()结果为3;capacity()结果为5

    cout<<myvector.capacity()<<endl;//容器真实容量





  return 0;

}



int main ()

{

/******************************************

//clear():

        vector<int> myvector;

        for(unsigned i=1;i<=10;i++)

            myvector.push_back(i);

        myvector.clear();//会清空容器

        cout<<myvector.size();//输出0



*******************************************/





/*******************************************

//data()

        vector<int> a(1,1);//初始化1个1

        int *p=a.data();//返回元素首地址

        cout<<*p<<" ";//输出1

        *p=2;//容器中的值也会改变

        cout<<*p<<" ";//输出2

        cout<<*a.begin()<<" ";//输出2

        p++;//不再指向容器中值

        *p=5;

        cout<<*p<<" ";

        cout<<a.size()<<" ";//容器大小不变,输出1

***********************************************/

//erase():

/***********************************************

        vector<int> a;

        for(int i=1;i<=10;i++)

            a.push_back(i);

        cout<<a.size()<<" ";//输出10

        /

        //

        //     a.erase(a.begin()+1);//删除下标为1的元素

        //     cout<<a.size()<<" ";//输出9

        //

        ///



        a.erase(a.begin()+1,a.begin()+6);//从下标1开始删除,一直到下标6截止(下标6不会删除)

        cout<<a.size()<<endl;//输出5

******************************************************/



/********************************

//front():

       vector<int> a;

       for(int i=1;i<=10;i++)

           a.push_back(i);

       cout<<a.front();//返回第一个元素

**********************************/



/*****************************************************

//get_allocator():

    vector<int> a;

    int * p;

    unsigned int i;

    p = a.get_allocator().allocate(5);//申请5个空间给allocator

    for (i=0; i<5; i++)

    {

        a.get_allocator().construct(&p[i],i);//对空间进行赋值

        cout<<p[i]<<" ";//结果:0 1 2 3 4

    }

    for (i=0; i<5; i++) a.get_allocator().destroy(&p[i]);//这个不知道干嘛,感觉是销毁空间

    a.get_allocator().deallocate(p,5);//这个是回收空间



***************************************************************/

    return 0;

}



int main()

{//

//insert():

//    vector<int> a(2,100);

//    for(unsigned i=0;i<a.size();i++)//输出结果:100 100

//        cout<<a[i]<<" ";

//    cout<<endl;

//    vector<int>::iterator it;

//    it=a.begin();

//

//    a.insert(it+1,1);//在it的位置插入1

//      //第一个参数为插入的位置必须为迭代器的类型),第二个为插入的值

//    for(unsigned i=0;i<a.size();i++)//输出结果:100 1 100

//        cout<<a[i]<<" ";

//    cout<<endl;

//

//    it=a.begin();

//    a.insert(it,2,20);//在it的位置插入2个20

//    //第一个参数为插入的位置(必须为迭代器的类型),第二个为插入的个数,第三个为插入的值

//    for(unsigned i=0;i<a.size();i++)//输出结果:20 20 100 1 100

//            cout<<a[i]<<" ";

//        cout<<endl;





/

//    vector<int> a(2,4),b(3,2);

//    vector<int>::iterator it=b.begin();

//    b.insert(it+1,a.begin(),a.end()-1);//三个参数类型都是迭代器,把容器a的一段插入到容器b中

//    for(unsigned i=0;i<b.size();i++)//输出结果:2 4 4 2 2

//        cout<<b[i]<<" ";

///



//

//    vector<int> a(2,4);

//    int b[3]={9,10,11};

//    a.insert(a.begin()+1,b+1,b+3);//把数组的一段地址这一段数据插入

//    for(unsigned i=0;i<a.size();i++)//输出结果:4 10 11 4

//        cout<<a[i]<<" ";

//

    return 0;

}



int main()

{

/**********************************************************

    //max_size():返回容器最大可以申请的空间

    //size():返回容器中的元素个数

    //capacity():返回容器中目前申请的空间个数

    vector<int> m;

    for (int i=0; i<100; i++)

        m.push_back(i);

    cout << "size: " << m.size() << "\n";//输出100

    cout << "capacity: " << m.capacity() << "\n";//输出128

    cout << "max_size: " << m.max_size() << "\n";//输出1073741823

*************************************************************/



/***************************************************

    //operator=

    vector<int> foo (3,1);

    vector<int> bar (5,2);

    bar=foo; //容器可以互相赋值

    cout<<bar.size()<<endl;//输出:3

    for(unsigned i=0;i<bar.size();i++)//输出结果:1 1 1

        cout<<bar[i]<<" ";

    //operator[]

    foo[1]=3;//重载[]方便了访问容器元素,以及修改他的值

**************************************************/

/*********************************************************



//rend(),rbegin()

    vector<int> a;

    for(int i= 1;i<6;i++)//1 2 3 4 5加入容器

        a.push_back(i);

    vector<int>::reverse_iterator  it,ite;

    it=a.rbegin();//返回类型为reverse_iterator,返回位置为最后一个元素

    cout<<*it<<endl;//输出:5

    it++;//相当于向前移动一个位置,原先在最后一个位置,现在变到倒数第二个

    cout<<*it<<endl;//输出:4



    ite=a.rend();//返回的是第一个位置的前一个

    cout<<*ite<<endl;//输出的是一个随机数

    ite--;//到了第一个位置

    cout<<*ite<<endl;//输出:1



***********************************************************/

    return 0;

}





int main()

{

    /***************************************



        vector<int> a;

        a.reserve(10);//申请10个空间

        cout<<a.size()<<endl;//输出:0

        cout<<a.capacity()<<endl;//输出:10



    ****************************************/

    vector<int> myvector;

    for (int i=1;i<10;i++)

        myvector.push_back(i);

/***********************************************************

    cout<<myvector.size()<<endl;//输出9

    cout<<myvector.capacity()<<endl;//输出16



    myvector.resize(5);//重新设置size()大小,不会改变capacity(),如果设置的大小大于capacity(),则会改变capacity()

    cout<<myvector.size()<<endl;//输出:5

    cout<<myvector.capacity()<<endl;//输出:16



    cout<<"myvector[8]="<<myvector[8]<<endl;//输出:9,说明其他元素值还在

*************************************************************/



    myvector.resize(10,100);//改变size大小,若size变小,100没有意义,若变大,把多出来的空间用100填进去



    myvector.resize(13);//size若大于原先的,用0初始化元素

    cout<<myvector.capacity()<<endl;//输出:16

//输出:1 2 3 4 5 6 7 8 9 100 0 0 0

        cout << ' ' << myvector[i];

    cout << '\n';



    return 0;

}





int main()

{

//swap():

    vector<int> foo (3,100);   // 初始化3个 100

    vector<int> bar (5,200);   // 初始化5个 200



    foo.swap(bar);//把容器互换

    for (unsigned i=0; i<foo.size(); i++)
    //输出:200 200 200 200 200

        cout << foo[i]<<" ";

    cout << '\n';

  for (unsigned i=0; i<bar.size(); i++)
  //输出:100 100 100

    cout << bar[i]<< ' ' ;

    cout << '\n';

    return 0;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值