C++ vector 用法

来源:互联网 发布:手机淘宝怎样开店认证 编辑:程序博客网 时间:2024/06/05 19:43

介绍

向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器。 与string相同, vector 同属于STL(Standard Template Library, 标准模板库)中的一种自定义的数据类型, 可以广义上认为是数组的增强版。
vector 容器与数组相比其优点在于它能够根据需要随时自动调整自身的大小以便容下所要放入的元素。此外, vector 也提供了许多的方法来对自身进行操作。

引用

文件包含:
首先在程序开头处加上#include< vector >以包含所需要的类文件vector
还有一定要加上using namespace std;

向量的声明及初始化

vector 型变量的声明以及初始化的形式也有许多, 常用的有以下几种形式:

vector<int> a ;                                //声明一个int型向量a        vector<int> a(10) ;                            //声明一个初始大小为10的向量        vector<int> a(10, 1) ;                         //声明一个初始大小为10且初始值都为1的向量        vector<int> b(a) ;                             //声明并用向量a初始化向量b        vector<int> b(a.begin(), a.begin()+3) ;        //将a向量中从第0个到第2个(共3个)作为向量b的初始值

除此之外, 还可以直接使用数组来初始化向量:

        int n[] = {1, 2, 3, 4, 5} ;        vector<int> a(n, n+5) ;              //将数组n的前5个元素作为向量a的初值        vector<int> a(&n[1], &n[4]) ;        //将n[1] - n[4]范围内的元素作为向量a的初值

元素的输入及访问

C++ vector 重载了[] 运算符,因此可以像直接使用数组的方式访问vector中的元素,比如cout<< vec[0]<< endl; 记住下标是从0开始的;
但是,直接使用[]并不会检查vector是否越界,因此,在很多文章中推荐使用at(i)成员函数
使用迭代器的情况:
迭代器可以认为是指向vector元素的指针

vector<int>::iterator it;for(it=vec.begin();it!=vec.end();it++)    cout<<*it<<endl;

另外,在C++标准中,auto变量的使用非常方便(在C++ 11之后的标准中auto的支持),可以通过如下代码方便的定义迭代器:

for(auto it=vec.begin();it!=vec.end();it++)    cout<<*it<<endl;

这种使用形式在定义了一个二维或三维vector,或是vector中包含自定义结构体的时候非常好用,无需写长长的iterator定义。
特别的,在使用迭代器指向一个保存了结构体的vector时,引用结构体内变量的时候需要给*it 加上小括号:

struct MyPoint{    double dx;    double dy;    double dz;    SYSTEMTIME syst;};void main(){    vector<MyPoint> vecMyP;    MyPoint mpoint;    mpoint.dx = 1;    mpoint.dy = 2;    mpoint.dz = 3;    GetLocalTime(&mpoint.syst);    vecMyP.push_back(mpoint);    auto itMyP = vecMyP.begin();    double tmp;    tmp = (*itMyP).dx; //这里要加上小括号,再在后面引用结构体内的变量    cout<<tmp;}

成员函数

原创粉丝点击