首页 > 其他 > 详细

初探STL容器之Vector

时间:2014-07-10 21:46:12      阅读:366      评论:0      收藏:0      [点我收藏+]

vector

 

特点:

 

1.可变长的动态数组
2.使用时包含头文件 #include <vector>
3.支持随机访问迭代器
? 根据下标随机访问某个元素时间为常数
? 在尾部添加速度很快
? 在中间插入慢

 

 

成员函数

 

初始化

 

vector();              初始化成空
vector(int n);               初始化成有n个元素
vector(int n, const T & val);     初始化成有n个元素, 每个元素的值都是val,类型是T
vector(iterator first, iterator last);  初始化为与别的容器上区间[first, last)一致的内容


举例:

1.创建一个int类型的空的vector对象: 

  vector<int> intvec; 

2.创建一个包含5个int类型数据的vector: 

    vector<int> intvec(5); 

3.创建一个包含5个int类型数据的vector,并且都初始化为2: 

       vector<int> intvec(5, int(2)); 

4.通过复制某vec容器来创建

     vector<int> intvec(vec.begin+M,vec.begin+N)

 

 

 

 

元素的访问

 

 

intvec.at(index) 

返回由index指定的位置上的元素

intvec[index] 

返回由index指定的位置上的元素

 

 

 

 


举例:

 

include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> vec(10);
    for (int i = 0;i != vec.size();i++)
    {
        vec.at(i) = i;
        //vec[i] = i ;
    }

    for (int i = 0;i != vec.size();i++)
    {
        cout << vec.at(i)<<endl;
        //cout <<vec[i]<<endl;
    }

     
    

    return 0;
}


 

 

 

 

容器的大小

 

表达式 

作用

intvec.capacity() 

返回不重新分配空间可以插入到容器intvec中的元素的最大个数

intvec.empty() 

容器intvec为空,返回true;否则,返回false

Intvec.size() 

返回容器intvec中当前的个数

intvec.resize(num) 

将元素个数改为num。如果size()增加,默认的构造函数负责创建这些新元素

intvec.resize(num, elem)

将元素个数改为num。如果size()增加,默认的构造函数将这些新元素初始化为elem

 

 

举例:

 

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> vec1;
    cout << vec1.empty()<<endl; //返回1
    cout << vec1.size()<<endl;  //返回0

    vector<int> vec2(20);
    cout << vec2.empty()<<endl; //返回0
    cout << vec2.size()<<endl;  //返回20

    vector<int> vec3(15,1);
    cout << vec3.capacity()<<endl;//返回15
    vec3.push_back(1);
    cout << vec3.size()<<endl;  //返回16
    cout << vec3.capacity()<<endl;//返回30
                                  //数组不够时,下次重新分配时会扩大为两倍

    return 0;
}


 

容器的操作

 

   语句   

     作用

intvec.clear()    

从容器中删除所有元素

intvec.erase(position) 

删除由position指定的位置上的元素

intvec.erase(beg,end)   

删除从beg到end-1之间的所有元素

intvec.insert(position, elem)   

将elem的一个拷贝插入到由position指定的位置上,并返回新元素的位置

intvec.inser(position, n, elem) 

将elem的n个拷贝插入到由 position指定的位置上

intvec.insert(position, beg, end) 

将从beg到end-1之间的所有元素的拷贝插入到intvec中由position指定的位置上

intvec.push_back(elem) 

将elem的一个拷贝插入到vector的末尾

intvec.pop_back()   

删除最后元素

intvec.front()

返回第一个元素的引用,不检查容器是否为空

Intvec.back()

返回最后一个元素的引用,不检查容器是否为空

 

 

 

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> vec(10,1);
    cout<<vec.empty()<<endl;  //返回0
    vec.clear();
    cout<<vec.empty()<<endl;  //返回1

    vector<int> vec1(1,1);
    vec1.insert(vec1.begin()+1,2); //在该位置插入,把原来该位置以其以后的元素整体后移
    for(int i = 0;i != vec1.size();i++)
        cout<<vec1.at(i);  //12
    cout<<endl;

    vec1.push_back(3);
    for(int i = 0;i != vec1.size();i++)
        cout<<vec1.at(i);  //123
    cout<<endl;

    vec1.pop_back();
    vec1.pop_back();
    for(int i = 0;i != vec1.size();i++)
        cout<<vec1.at(i);  //1
    cout<<endl;

    return 0;
}


 

 

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> vec(10,1);
    vec.push_back(2);//12

    cout<<vec.front()<<endl;  //返回1
    cout<<vec.back()<<endl;  //返回2

    int &head = vec.front();
    head++;
    int &tail = vec.back();
    tail--;
    cout<<vec.front()<<endl;  //返回2
    cout<<vec.back()<<endl;  //返回1

    return 0;
}


 

二维数组

 

vector< vector<int> > v(3);
//v有3个元素,
//每个元素都是vector<int> 容器

 

#include <iostream>
#include <vector>
using namespace std;
int main() {
    vector< vector<int> > v(3);
    for(int i=0; i<v.size(); ++i)
        for(int j=0; j<4; ++j)
            v[i].push_back(j);
    for(int i=0; i<v.size(); ++i){
        for(int j=0; j<v[i].size(); ++j)
            cout<<v[i][j]<<" ";
        cout<<endl;
    }
    return 0;
}


 输出:

0  1  2  3

0  1  2  3

0  1  2  3

 

 

 


 

 

初探STL容器之Vector,布布扣,bubuko.com

初探STL容器之Vector

原文:http://blog.csdn.net/wangxiaobupt/article/details/37598111

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!