一、Vector向量容器

简介:Vector向量容器可以简单的理解为一个数组,它的下标也是从0开始的,也就是说,如果vector容器的大小是n,那么,元素的下标是0~n-1。使用时可以不用确定大小。vector具有内存自动管理的功能,对于元素的插入和删除,它可以进行动态调整所占用的内存空间,它里面有很多系统已经定义好了的函数方法,可以直接调用进行插入元素与在尾部扩张元素。Vector是一种简单高效的容器,完全可以代替数组。

函数方法总结:

1. 使用vector向量容器,需要头文件 “ #include<vector> ”

2. 尾部元素扩张   push_back()

3. 返回首元素位置的迭代器       begin();

4. 返回最后一个元素的下一元素位置的迭代器       end();

5. 元素的插入  insert();

6. 元素的删除      

(1).删除vector中迭代器所指的一个元素或一段区间中的所有元素        erase();

(2).一次性删除vector中的所有元素        clear();

7. 反向排序 reverse();(使用时需要在头文件进行声明#include < algorithm >)       

8. 对向量元素进行排序(默认为升序排列)sort(); (使用时需要定义头文件“#include < algorithm >”)     

9. 向量大小size();

10. 判断向量是否为空empty();

 

Vector向量容器的用法:

  1. 使用Vector向量容器,需要在头文件声明 “ #include< vector > ”。
  2. 创建vector对象的三种形式(向量的元素类型可以是int,double,char等简单类型,也可以是结构体或者string基本字符序列容器)。

        (1)vector< int >  v;   //存储整形的容器v。

      (2)vector< int >  v(10);  //存储10个int类型的向量容器,这里的每一个元素都为0。

        (3)vector< double >  v(10,2.02);  //存储10个double类型的向量容器,每个值都为2.02。

3. 使用迭代器进行遍历

vector<double>::iterator it;    //定义迭代器变量it。

for(it=v.begin();it!=v.end();it++)  //从首元素到最后一个元素的下一个元素位置结束

    {

        cout << *it << endl; //将这10个double类型的元素输出出来

    }

   

1,for循环遍历访问vector元素

#include <iostream>

#include<vector>

using namespace std;     //因为C++STL泛型都是定义在std命名空间中,所以,必须在头文件声明的最后一句加上这一行

 

int main()

{

    vector<double> v (10,5.20);//定义一个存储10个double类型元素的向量容器,其中的每一个元素都为5.20

    v[5] = 10.24;    //对v[5]进行重新赋值

    v[9] = 88.48;    //对v[9]进行重新赋值

    for ( int i=0; i<10; i++ )

    {

        cout << v[i] << endl;//将这10个double类型的元素输出出来

    }

return 0;

}

结果如下:

2,用迭代器访问vector元素

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

#include <iostream>

#include<vector>

using namespace std;

int main()

{

    vector<double> v(10,10.24);//定义一个存储10个double类型元素的向量容器,其中的每一个元素都为10.24

    v[5]=10.99;      //对v[5]进行重新赋值

v[9]=88.10;   //对v[9]进行重新赋值

 

vector<double>::iterator it;    //定义迭代器变量it

 

    for( it=v.begin() ; it!=v.end() ; it++)  //从首元素到最后一个元素的下一个元素位置结束

    {

        cout << *it << endl;//将这10个double类型的元素输出出来

    }

 

    return 0;

}

结果如下:

//这里我有个疑问,最后输出的v[9],是88.1,而不是88.10。不知道是为什么,希望有人可以解答一下。

3,尾部元素扩张与元素插入

通常使用push_back()对vector容器在尾部追加新元素。尾部追加元素,vector容器会自动分配新的内存空间。

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

 

#include <iostream>

#include<vector>

using namespace std;

int main()

{

    vector<double> v (10,1);

    v[5]=9.9;    //对v[5]进行重新赋值

    v[9]=8.80;   //对v[9]进行重新赋值

    vector<double>::iterator it;    //定义迭代器变量it

 

    for(it= v.begin();it!=v.end();it++)  //从首元素到最后一个元素的下一个元素位置结束

    {

        cout << *it <<" "; //将这10个double类型的元素输出出来

    }

    cout<<endl;

 

    v.push_back(2);  //将2这个元素从尾部添加到v向量容器中去

    v.push_back(5);  //将5这个元素从尾部添加到v向量容器中去

 

    v.insert(v.begin(),8);   //在v向量容器的最前面加入一个新元素8

    v.insert(v.begin()+2,2); //在第二个元素前插入新元素1

 

    v.insert(v.end(),3);  //在v向量容器末尾追加新元素3

 

    for(it=v.begin();it!=v.end();it++)  //从首元素到最后一个元素的下一个元素位置结束

    {

        cout << *it <<" ";  //将这10个double类型的元素输出出来

    }

    cout<<endl;

 

    v.clear();   //将v这个向量容器给清空

    cout<<v.size()<<endl;   //输出v这个向量容器的大小

 

    return 0;

}

结果如下:

 

4,erase()元素删除

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

Clear()一次性删除vector中的所有元素

代码如下:

#include<iostream>

#include<vector>

using namespace std;

int main()

{

        vector<int> v(10);

        for(int i=0;i<10;i++)

        {

                 v[i]=i;

        }

        vector<int>::iterator it;//定义迭代器变量it

 

        v.erase(v.begin()+2);//删除第二个元素,从0开始计数

 

       

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

        {

                 cout<<*it<<" ";//输出迭代器上的元素

        }

 

        cout<<endl;

 

        v.erase(v.begin()+1,v.begin()+5);//删除第一到第五之间的所有元素(注意:删除的是[1-5),即如果元素是从零到九,则删除1,2,3,4)

       

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

        {

                 cout<<*it<<" ";//输出迭代器上的所有值

        }

        cout<<endl;

 

        v.clear();//清空容器内的所有元素

        cout<<v.size()<<endl;//输出容器的大小

        return 0;

}

结果如下:

5,reverse反向排序算法

reverse算法可以将向量中的某段迭代器区间元素反向排列。

 

代码如下:

#include <iostream>

#include<algorithm>

#include<vector>

using namespace std;

int main()

{

    vector<int>v(10,1); //定义一个整形的大小为10个元素且均为1的v向量容器

    vector<int>::iterator it;   //定义迭代器变量it

 

    for(int i=0;i<10;i++)   //将v向量容器进行重新赋值0~9;

    {

        v[i]=i;

    }

        for(it=v.begin();it!=v.end();it++)  //原样遍历输出v向量容器

    {

        cout<<*it<<" ";

    }

    cout<<endl;

 

reverse(v.begin(),v.end());//反向排列向量的从首到尾之间的元素

 

    cout<<"反向排序后:"<<endl;

    for(it=v.begin();it!=v.end();it++)  //反向排序后遍历输出v向量容器

    {

        cout<<*it<<" ";

    }

    cout<<endl;

    return 0;

}

结果如下:

6,对向量容器元素排序(默认排序为升序) sort();

Sort算法要求使用随机访问迭代器进行排序,默认进行升序排列。

例如:

#include <iostream>

#include<algorithm>

#include<vector>

using namespace std;

//C++ const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。如果在编程中确实有某个值保持不变,就应该明确使用const,这样可以获得编译器的帮助。

bool beyond(const int &a,const int &b)//自己定义比较函数,要求由大到小排序

{

        if(a!=b)return a>b; //如果a,b不相等的话返回a和b之间的最大值

        else return a<b;    //否则返回a和b之间的最小值

}

 

int main()

{

    vector<int>v(10,1);//定义一个整形的大小为10个元素且均为1的向量容器

   

        vector<int>::iterator it;   //定义迭代器变量it

 

    for(int i=0;i<10;i++)   //将v向量容器进行重新赋值9~0;

    {

        v[i]=i;

    }

   

    sort(v.begin(),v.end());  //sort函数方法默认情况下对向量容器进行升序排列

 

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

    {

        cout<<*it<<" ";

    }

cout<<endl;

cout<<endl;

 

    sort(v.begin(),v.end(),beyond); //自己定义sort()排序方式

 

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

    {

        cout<<*it<<" ";

    }

    cout<<endl;

 

    return 0;

}

结果如下:

猜你喜欢

转载自blog.csdn.net/ysz171360154/article/details/83689942
今日推荐