• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

C++ STL基础之Vector用法实例

OC/C/C++ 水墨上仙 1577次浏览

C++ STL基础之Vector用法实例
vector的函数共有五大类:定义及初始化,增加删除元素,访问元素,返回迭代器,获取设置长度容器
转自:http://blog.csdn.net/ouyangshima/article/details/8471343

#include <string>
#include <vector> 
#include <conio.h>
#include<iostream>
using namespace std;  
//定义及初始化
void test0()
{ 
    vector<int> v;//只定义了v,没有分配内存空间
    vector<int> ve(2);//定义并分配了2int空间的ve,缺省为0
    vector<int> vec(3,4);//定义并初始化了3个4的vec
    cout<<v.size()<<" "<<ve.size()<<" "<<vec.size()<<endl;//0 2 3
    cout<<"ve:"<<ve[0]<<" "<<ve[1]<<endl;//ve: 0 0
    cout<<"vec:"<<vec[0]<<" "<<vec[1]<<" "<<vec[2]<<endl;//vec: 4 4 4
    v.assign(3,8);//赋值3个8
    ve.assign(vec.begin(),vec.end());//赋值3个4
    for (int i=0;i<v.size();i++) 
        cout<<v[i]<<" "; //8 8 8 
    cout<<endl;
    for (int i=0;i<ve.size();i++) 
        cout<<ve[i]<<" ";//4 4 4 
    cout<<endl;
    ve.assign(0,0);//赋值0个0,且可以看出它的内存是变化的.此为空
    for (int i=0;i<ve.size();i++) 
        cout<<ve[i]<<" ";//为空 
    cout<<endl;    
}
//增加删除元素
void test1()
{ 
    vector<char> v(2,'A');
    v.push_back('B');//在尾部加入一个数据
    cout<<v[0]<<" "<<v[1]<<' '<<v[2]<<endl;//A A B
    v.pop_back();//删除最后一个数据
    v.insert(v.begin()+1,'C');//在第二个位置上插入了'C'
    v.insert(v.begin(),2,'D'); //在第一个第二个位置上分别插入'C'
    v.insert(v.end(),v.begin(),v.end());//在其末端插入了其之前的所有元素,等于复制了
    for (int i=0;i<v.size();i++) 
        cout<<v[i]<<" "; //D D A C A D D A C A
    cout<<endl;
    v.erase(v.begin());//删除第一个元素
    for (int i=0;i<v.size();i++) 
        cout<<v[i]<<" "; //D A C A D D A C A
    cout<<endl;
    v.erase(v.begin()+1,v.end()-1);//留下两端的元素,删除中间的元素
    for (int i=0;i<v.size();i++) 
        cout<<v[i]<<" "; //D A
    cout<<endl;
    v.clear();//删除全部
    for (int i=0;i<v.size();i++) 
        cout<<v[i]<<" "; //为空
    cout<<endl;
}
//访问获取元素
void test2()
{ 
    string str[]={"one","two","three","four","five","six"};
    vector<string> ve;
    for(int i=0;i<6;i++) 
    {
        ve.push_back(str[i]); 
        cout<<ve[i]<<" ";//通过索引值i来进行访问,使用的是数组的形式,当然不能越界
    }
    cout<<endl;
    for(int i=0;i<6;i++) 
    { 
        cout<<ve.at(i)<<" ";//使用at()通过i来进行访问,也不能越界。若越界,在调试时,会抛出异常;在运行时直接弹出错误
    }
    cout<<endl;
    cout<<ve.front()<<endl;//one //返回第一个元素的引用
    cout<<ve.back()<<endl;//six //返回最后一个元素的引用 
}
//返回迭代器
void test3()
{ 
    vector<int>ve(4);
    ve[0]=0;ve[1]=1;ve[2]=2;ve[3]=3;
    cout<<ve[0]<<" "<<ve[1]<<" "<<ve[2]<<" "<<ve[3]<<endl;
    vector<int>::iterator iter;//定义一个迭代器iter
    iter=ve.begin();//返回一个iterator,它指向vector第一个元素
    cout<<*iter<<endl;//0
     iter=ve.end();//返回一个iterator,它指向vector最末尾元素的下一个位置(它不是末尾元素)
     //cout<<*iter<<endl;//会出现错误
     cout<<*(iter-1)<<endl;//3 用此方法访问末尾元素
     vector<int>::reverse_iterator reIter;//定义一个反向的迭代器
     reIter=ve.rbegin();//返回一个方向iterator,它指向vector末尾元素
    cout<<*reIter<<endl;//3
    reIter=ve.rend();//返回一个方向iterator,它指向vector第一个元素之前的位置(它是不存在的)
    cout<<*(reIter-1)<<endl;//0  用此方法访问第一个元素
} 
//取得、设置长度、容量
void test4()
{ 
    vector<string> ve(8);
    cout<<ve.size()<<endl;//8
    cout<<ve.max_size()<<endl;//134217727,10737441823
    cout<<ve.capacity()<<endl;//8
    cout<<ve.empty()<<endl;//0,说明不为空,因为默认值是0
    ve.assign(12,"3");
    cout<<ve.size()<<endl;//12
    cout<<ve.max_size()<<endl;//134217727(string),10737441823(int)
    cout<<ve.capacity()<<endl;//12
    cout<<ve.empty()<<endl;//0 
    ve.assign(1,"003");
    cout<<ve.size()<<endl;//1  返回vector当前持有元素的个数
    cout<<ve.max_size()<<endl;//他的最大个数与数据类型有关
    cout<<ve.capacity()<<endl;//12 容量 取得vector目前可容纳的最大元素个数。这个方法与存储配置有关,它通常只会增加,不会因为元素被删除而随之减少
    cout<<ve.empty()<<endl;//0 为空时,返回true
    ve.resize(15,"W");//改变vector目前持有元素的个数
    cout<<ve.size()<<endl;//15
    cout<<ve.max_size()<<endl;//134217727(string),10737441823(int)
    cout<<ve.capacity()<<endl;//18
    cout<<ve.empty()<<endl;//0 
    ve.reserve(5);//如有必要,可改变vector的容量大小(只会增加,减少不起作用)
    cout<<ve.size()<<endl;//15
    cout<<ve.max_size()<<endl;//134217727(string),10737441823(int)
    cout<<ve.capacity()<<endl;//18 当ve.reserve(35);则输出35;则说明容量capacity只会增加不会减少
    cout<<ve.empty()<<endl;//0 
} 
//遍历vector
void test5()
{ 
    vector<int> vec;
    for (int i=0;i<10;i++)
    {
        vec.push_back(i);
    }
    for (int i=0;i<vec.size();i++) 
        cout<<vec[i]<<" ";
    cout<<endl;
    vector<int>::iterator iter;
    for (iter=vec.begin();iter!=vec.end();iter++)
        cout<<*iter<<" ";
    cout<<endl;
    vector<int>::reverse_iterator reIter;
    for (reIter=vec.rbegin();reIter!=vec.rend();reIter++) 
        cout<<*reIter<<" ";//9 8 7 6 5 4 3 2 1 0
    cout<<endl;
    vector<int>::reverse_iterator revIter;
    for (revIter=vec.rend()-1;revIter!=vec.rbegin();revIter--) 
        cout<<*revIter<<" ";//0 1 2 3 4 5 6 7 8 //有点残缺
    cout<<endl;
} 
void Test(char h)
{
    cout<<"press key===="<<h<<endl;
    switch(h)
    { 
    case '0':  test0();break;
    case '1':  test1();break;
    case '2':  test2();break;
    case '3':  test3();break;
    case '4':  test4();break;
    case '5':  test5();break; 
    case 27:
    case 'q':exit(0);break; 
    default:cout<<"default "<<h<<endl;break;
    }
}
void main()
{
    while(1)
    {
        Test(getch());
    } 
}


喜欢 (0)
加载中……