码迷,mamicode.com
首页 > 其他好文 > 详细

STL里容器vector部分用法

时间:2019-04-19 17:36:42      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:font   end   span   pre   移动   mic   向量   9.png   现在   

 

基础用法在代码注释中说明

//test.cpp
#include<iostream>
#include<vector>
using namespace std;
int main()
{
    vector<int> v;
    vector<int> v1(10);//为向量v1赋值10个0
    vector<int> v3(10, 100);//为向量v3赋值10个100
    for(int i=1; i<8; ++i)
    {
        v.push_back(i);
        v1.push_back(i);
    }
    vector<int>::iterator it = v.begin();//迭代器,指向向量头部
    cout<<"v = ";
    while(it!=v.end())
    {
        cout<<*it<<" ";
        ++it;
    }
    cout<<endl;


    vector<int>::reverse_iterator rv_it = v1.rbegin();//反向迭代器,指向向量尾部,且自加时是向向量头部移动:
    cout<<"rv_v1 = ";
    while(rv_it != v1.rend())
    {
        cout<<*rv_it<<" ";
        ++rv_it;
    }
    cout<<endl;

    v3.insert(v3.begin()+3, 7);//在v3第三个元素前插入7
    v3.insert(v3.begin()+1, 2, 8);//在v3第二个元素前插入2个8
    vector<int>::iterator first = v.begin()+3;
    vector<int>::iterator end = v.end();
    v3.insert(v3.end(), first, end);//在v3.end()后将区间[v1.begin()+3, v1.end())元素全部插入:
    vector<int>::iterator it3 = v3.begin();
    v3.erase(v3.begin()+1);//删除v3第二个元素
    cout<<"v3 = ";
    while(it3 != v3.end())
    {
        cout<<*it3<<" ";
        ++it3;
    }
    v1.assign(first, end);//将v1清空后为v1赋值,将[first, end)区间里包含的元素赋值给v1
    v1.assign(7, 7);//将v1清空后为v1赋值7个7
    cout<<endl;
    cout<<v.at(4)<<endl;
    cout<<v[4]<<endl;
    cout<<"v.size() = "<<v.size()<<endl;//v的大小(里边有几个元素)
    cout<<"v.capacity() = "<<v.capacity()<<endl;//v的容量
    v.resize(20);//指定向量的大小为20
    cout<<"v.capacity() = "<<v.capacity()<<endl;
    return 0;
}

这里说两个点

1.向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器。 与string相同, vector 同属于STL(Standard Template Library, 标准模板库)中的一种自定义的数据类型, 可以广义上认为是数组的增强版

vector可以为增加的元素动态的自动开辟空间,其开辟特点为以2的倍数增长,比如,新构建一个向量V1,为其尾插一个元素,打印其大小和容量为

技术图片

现在增加4个元素,则容量将变为8

技术图片

2.由第一个问题引出第二个问题,在使用迭代器时一定要注意向量在增长过程中是否自动扩容了,若果自动扩容,则原来的迭代器都会失效,要重新定义

自动扩容过程是:开辟一个二倍于原来向量的空间,再将原先的元素复制过来

原来的迭代器还指着原来的空间,但是向量的空间已经改变,所以原来的迭代器失效

技术图片

 以上两条适用于自动扩容过程

STL里容器vector部分用法

标签:font   end   span   pre   移动   mic   向量   9.png   现在   

原文地址:https://www.cnblogs.com/area-h-p/p/10737191.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!