博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

学习笔记之vector向量容器

Posted on 2016-01-06 11:28  梦茴初夏  阅读(422)  评论(0编辑  收藏  举报

今天复习到vector向量容器,里面包括vector向量容器的一些优点以及具体的使用方法及代码,分享给大家。

Vector向量容器不但能够像数组一样对元素进行随机访问,还可以在尾部插入元素,是一种简单、高效的容器,完全可以代替数组。

 

Vector具有内存自动管理的功能,对于元素的插入和删除,可以动态调整所占的内存空间。

 

使用vector向量容器,需要在头文件中包含“#include<vector>”。

 

Vector向量容器的下标是从0开始计数的。

 

使用方法:

1.创建vector对象

(1)不指定容器的元素个数

vector<int>v;

(2)创建的时候指定容器的大小

Vector<double>v10);

(3)创建一个具有n个元素的向量容器对象,没个元素具有指定的初始值。

Vector<int>v(10,8.6);

 

2.尾部元素扩张

在使用vector向量容器的时候,我们通常使用push_back()函数对vector容器在尾部追加新的元素。

 

在尾部追加新的元素时候,vector容器会自动分配新的内存空间。

 

vector<int>v;

v.push_back(2);

 

3.通过下标的方式访问vector元素

vector<int>v;

cout<<v[1]<<endl;

 

4.通过迭代器访问vector元素

我们在对vector中的元素进行访问的时候,通常使用迭代器配合循环语句对vector中的元素进行遍历访问,迭代器的类型一定要与它要遍历的vector对象的元素类型一致。

 

#include<iostream>

#include<vector>

 

using namespace std;

 

int main(){

    vector<int>v;

    v.push_back(2);

    v.push_back(7);

    v.push_back(10);

 

    vector<int>::iterator it;

    for( it = v.begin() ; it != v.end() ; it++ )

        cout<<*it<<" ";

    cout<<endl;

    return 0;

}

 

5.元素的插入

insert方法可以在vector对象的任意位置前插入一个新的元素,同时,vector自动扩张一个元素空间,插入位置后的所有元素一次向后挪动一个位置。

 

注意:insert()方法要求插入的位置,是元素的迭代器位置,而不是元素的下标。

 

#include<iostream>

#include<vector>

 

using namespace std;

 

int main(){

    vector<int>v;

    v.push_back(2);

    v.push_back(7);

    v.push_back(10);

 

    //在最前面插入元素,元素值为8

    v.insert(v.begin() , 8);

    //在第2个元素前面插入新元素,元素值为1

    v.insert(v.begin()+1 , 1);

    //在末尾追加新的元素3

    v.insert(v.end(),3);

    vector<int>::iterator it;

    for( it = v.begin() ; it != v.end() ; it++ )

        cout<<*it<<" ";

    cout<<endl;

    return 0;

}

 

 

6.元素的删除.

erase()方法可以删除vector中迭代器所指的一个元素或一段区间中的所有元素。

clear()方法可以一次性的删除vector中的所有元素。

#include<iostream>

#include<vector>

 

using namespace std;

 

int main(){

    vector<int>v;

    v.push_back(2);

    v.push_back(7);

    v.push_back(10);

 

    //在最前面插入元素,元素值为8

    v.insert(v.begin() , 8);

    //在第2个元素前面插入新元素,元素值为1

    v.insert(v.begin()+1 , 1);

    //在末尾追加新的元素3

    v.insert(v.end(),3);

 

    //删除第2个元素

    v.erase(v.begin()+1);

 

    //删除迭代器第1到第5区间的所有元素

    v.erase(v.begin(),v.begin()+5);

    

    //清空向量

    v.clear();

    vector<int>::iterator it;

    for( it = v.begin() ; it != v.end() ; it++ )

        cout<<*it<<" ";

    cout<<endl;

    return 0;

}

 

7.使用reverse反向排列算法

reverse反向排列算法,需要定义头文件“#include<algorithm>”,该算法可以将向量中某段迭代器区间元素反向排列。

 

#include<iostream>

#include<vector>

#include<algorithm>

 

using namespace std;

 

int main(){

    vector<int>v;

    v.push_back(2);

    v.push_back(7);

    v.push_back(10);

 

    //在最前面插入元素,元素值为8

    v.insert(v.begin() , 8);

    //在第2个元素前面插入新元素,元素值为1

    v.insert(v.begin()+1 , 1);

    //在末尾追加新的元素3

    v.insert(v.end(),3);

 

    vector<int>::iterator it;

    for( it = v.begin() ; it != v.end() ; it++ )

        cout<<*it<<" ";

    cout<<endl;

 

    reverse(v.begin() , v.end());

        for( it = v.begin() ; it != v.end() ; it++ )

        cout<<*it<<" ";

    cout<<endl;

    return 0;

}

 

 

8.在对vector向量容器中的元素进行排列的时候,还可以通过sort()算法排序,排列方法自定义。

 

9.向量的大小

使用size()方法可以返回向量的大小,即元素的个数。

使用empty()方法可以返回向量是否为空。

 

#include<iostream>

#include<vector>

#include<algorithm>

 

using namespace std;

 

int main(){

    vector<int>v;

    v.push_back(2);

    v.push_back(7);

    v.push_back(10);

 

    //在最前面插入元素,元素值为8

    v.insert(v.begin() , 8);

    //在第2个元素前面插入新元素,元素值为1

    v.insert(v.begin()+1 , 1);

    //在末尾追加新的元素3

    v.insert(v.end(),3);

 

    vector<int>::iterator it;

    for( it = v.begin() ; it != v.end() ; it++ )

        cout<<*it<<" ";

    cout<<endl;

 

    reverse(v.begin() , v.end());

        for( it = v.begin() ; it != v.end() ; it++ )

        cout<<*it<<" ";

    cout<<endl;

 

    //输出向量大小,即包含了多少个元素

    cout<<v.size()<<endl;

    //输出向量是否为空,如果非空,则返回逻辑假,即0,否则返回逻辑真,即1

    cout<<v.empty()<<endl;

 

    v.clear();

 

    cout<<v.size()<<endl;

    cout<<v.empty()<<endl;

    return 0;

}