C++STL——vector01

1.vector的几种构造函数

#include<iostream>
#include<vector>
using namespace std;


int main()
{
    vector<int> a;
    vector<int> b(5);//申请的这五个vector的初始值都为0
    vector<int> c(4,3);//申请的4个vector的初始值都为3
    vector<int> d(c);//用另一个vector来初始化这个vector,但是记住类型是严格匹配的,不存在什么隐式类型转化
    vector<int>::iterator ite1=c.begin();
    vector<int>::iterator ite2=c.end();
    vector<int> e(ite1,ite2);
    for(int i=0;i<c.size();i++)
    {
        cout<<e[i]<<" ";
    }
    return 0;

}

vector的尖括号里面可以添加任意类型,但是注意如果是添加自己的结构时就要自己提供一个缺省的构造函数,提供一点参考信息——(可以放任何类型的对象.不过要看你如何使用你的vector.有时候还是有一定的限制的.

比方说你这样用你的vector.
vector<type> x(100);也就是说你定义了一个含有100个元素的vector.

这时就要求你的type类型提工一个缺省的构造函数.)

2.vector对于容量的操作

#include<iostream>
#include<vector>
using namespace std;


int main()
{
    vector<int> vec1;
    //a[0]=3;你的这个vector没有内存不能这样赋值
    cout<<vec1.capacity()<<endl;
    vector<int>vec2(6);
    cout<<vec2.capacity()<<endl;//vectoe在初始化的时候是多少个容量就是多少个容量


    vec1.push_back(4);//这个函数是在末尾添加一个新的元素,并且初始化为括号中参数的值
    cout<<vec1[0]<<endl;
    cout<<vec1.capacity()<<endl;


    /*vector的扩容,当够用的时候他的容量不会发生改变,但是一旦不够用的时候,
    会根据不同的编译器做出不同的选择,对于codeblocks来说是加上原有容量的大小,
    还有VC编译器好像对windows10不太兼容*/
    vec1.push_back(2);
    cout<<"容量:"<<vec1.capacity()<<endl;
    vec1.push_back(2);
    cout<<"容量:"<<vec1.capacity()<<endl;
    vec1.push_back(2);
    cout<<"容量:"<<vec1.capacity()<<endl;
    vec1.push_back(2);
    cout<<"容量:"<<vec1.capacity()<<endl;


    vector<int>vec3(4);
    cout<<vec3.capacity()<<endl;
    vec3.reserve(34);//容量可以改成大一点的
    cout<<vec3.capacity()<<endl;
    vec3.reserve(12);//但是改小了没有用
    cout<<vec3.capacity()<<endl;
    return 0;

}

3.vector的迭代器仍然存在失效的情况,原因和string类型的失效原因是一样的

4.size(有效元素的个数)和 capacity(容量的大小)的区别

#include<iostream>
#include<vector>
using namespace std;


int main()
{
    vector<int> vec1(5);
    cout<<"vec1.capacity():"<<vec1.capacity()<<endl;
    cout<<"vec1.size():"<<vec1.size()<<endl;
    vec1.resize(0);
    cout<<"vec1.capacity():"<<vec1.capacity()<<endl;
    cout<<"vec1.size():"<<vec1.size()<<endl;
    vec1.push_back(3);
    cout<<"vec1.capacity():"<<vec1.capacity()<<endl;
    cout<<"vec1.size():"<<vec1.size()<<endl;
    //通过这几组测试我相信size和capacity的区别大佬们应该是看出来了
    return 0;

}

5.vector的输出

#include<iostream>
#include<vector>
using namespace std;


int main()
{
    vector<int>vec(8,3);
    for(int i=0;i<8;i++)
    {
        cout<<vec[i]<<endl;
    }//越界程序直接崩溃
    cout<<"**********************\n";


    for(int i=0;i<8;i++)
    {
        cout<<vec.at(i)<<endl;
    }//出错程序会抛出一个异常
    cout<<"**********************\n";


    vector<int>::iterator ite=vec.begin();
    for(ite;ite!=vec.end();ite++)
    {
        cout<<*ite<<endl;
    }
    return 0;
}

6.介绍一个for_each的用法

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;


void fun(int n)
{
    cout<<n<<endl;
}
int main()
{
    vector<int>vec(8,3);
    for_each(vec.begin(),vec.end(),fun);//用法在string的迭代器里面介绍过了
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40794602/article/details/80214516
今日推荐