C++ STL vector 最全入门

sort (a,a+8,great<int>),sort (a,a+8,less<int>) <>中的数组类型可以变动

由第1,2个参数指定的数组区间,采用第3个参数指定的比较方式进行排序。 如果没有指定第3个参数时,默认采用less方式排序。

下面介绍容器(container)

STL的容器包括顺序容器,关联容器,容器适配器。

顺序容器:向量(vector),链表(list) 和双端队列(deque)

关联容器: 集合(set),多重集合(multiset),映射(map),多重映射(multimap)

容器适配器:堆栈(stack)和队列(queue)

STL为了减小操作使用容器的难度,大多数容器提供了相同的成员函数。所有的容器都有以下的几个成员函数:

empty() //判断容器是否为空,若为空,返回true,否则返回false

max_size() //返回容器最大容量,即容器中能够保存的最多元素的个数

size() //返回容器中当前元素的个数

swap() //交换两个容器中的元素

此外各类容器还具有默认构造函数,拷贝构造函数,析构函数,并重载了=,<,<=,>和>=运算符函数,可以用他们直接进行两个容器之间的比较运算。

STL中的容器头文件名略(我直接用#include<bits/stdc++.h>一劳永逸)

只有vector,deque,list,set,multiset,map,multimap才支持的成员函数。

1.begin() 指向第一个元素

2.end() 指向最后一个元素 

3.rbegin() 指向按反顺序的第一个元素

4.rend() 指向按反顺序的末端位置

5.erase() 删除容器中的一个或多个元素

6.clear() 删除容器中的所有元素 

1.vector

vector是向量容器,具有存储管理的功能。在插入或删除数据时,vector能够自动扩展和压缩其大小,可以像数组一样使用vector,通过运算符[ ]访问其元素,但他比数组更灵活,当添加数据时,vector的大小能够自动添加,以容纳新的元素。

(1)vector的构造 (模板参数T是数组类型)

vector<T> c //产生一个空vector,其中没有任何元素

vector<T> c1(c2) //产生同型c2向量的一个复本(c2的所有元素被复制给c1)

vector<T> c(n,elem) //产生大小为n的向量c,且每个元素都是elem

vector<T> c(beg,end) //产生一个向量,并用区间[beg,end]作为元素的初值

(2)赋值操作

c1=c2 //将向量c2的元素全部赋值给向量c1

c.assign(n,e) //复制n个元素e,赋值给向量c

c.assign(beg,end) //将区间[beg,end]内的元素赋值给c

c1.swap(c2) //将c1和c2向量互换

(3)直接访问向量元素

c.at[n] //返回下标n所标识的元素,若下标越界,返回"out_of_range"

c[n] //返回下标n所标识的元素,不进行范围检查

c.front() //返回第一个元素

c.back() //返回最后一个元素

(4)vector向量的常用操作

c.insert(pos,e) //在pos位置插入元素e的副本,并返回新元素的位置

c.insert(pos,n,e) //在pos位置插入e的n个副本,不返回值

c.insert(pos,beg,end) //在pos位置插入区间[beg,end]内的所有元素

c.push_back(e) //在尾部插入元素e

c.pop_back() //删除最后一个元素

c.erase(pos) // 删除pos位置的元素

c.erase(beg,end) //删除区间[beg,end]内所有的元素

c.clear() //删除所有元素,清空容器

c.size() //返回向量c中元素的个数

c.resize(n) //将c重新设置为大小为n个元素的向量,如果n比原来的元素多,则多出的元素被初始化为0 

下面是实例(vector):

#include<bits/stdc++.h>
using namespace std;

//以int为例
void display(vector<int> &v)
{
    for(auto it=v.begin();it!=v.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
}
int main()
{
    int a[]={1,2,3,4,5,6};
    vector<int> v1,v2;//定义只有0个元素的向量v1,v2
    vector<int> v3(a,a+6);//定义向量v3并用数组a初始化该向量
    vector<int> v4(6);//定义具有6个元素的向量v4
    for(int i=10;i<=12;i++)
    {
        v1.push_back(i);//向v1向量的尾部加入10,11,12
    }
    v1.insert(v1.begin(),30);//将30插入到v1向量的最前面

    v2=v1;//将v1赋值给v2,v2与v1具有相同的元素

    v3.assign(3,10);//将v3的前3个元素都设置为10

    cout<<"v1: "; display(v1);
    cout<<"v2: "; display(v2);
    cout<<"v3: "; display(v3);

    v4[0]=10; v4[1]=20; v4[2]=30; v4[3]=40; //用数组方式访问向量元素

    cout<<"v4: ";
    for(int i=0;i<6;i++)
    {
        cout<<v4[i]<<" ";
    }
    cout<<endl;
    v4.resize(10);
    cout<<"v4: "; display(v4);
    return 0;
}

输出: 

v1: 30 10 11 12
v2: 30 10 11 12
v3: 10 10 10
v4: 10 20 30 40 0 0
v4: 10 20 30 40 0 0 0 0 0 0

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值