C++中的vector和deque

vector是顺序容器,元素的值与元素的位置无关,支持随机访问迭代器
它可以容纳很多类型的数据,可以看作是可变长动态数组

初始化

vector<int> v1;     //初始化一个普通vector
vector<int> v1(10);     //声明一个初始大小为10的vector,初值不确定
vector<int> v2(10,1);   //声明一个初始大小为10的vector,初值为1
vector<int> v3(v2);     //声明一个vector,并把v2的值赋予v3
vector<int> v4(v2.begin(),v2.begin()+2);  //声明一个vector,并把v2的0——2元素赋予v4
int a[] = {1,2,3,4,5};
vector<int> v5(a,a+4);  //用数组给vector赋初值

常用函数

v6.assign(v5.begin(),v5.begin()+2);  //把v6的值改为v5的0——1

v5.front();  //返回第一个元素
v5.back();  //返回最后一个元素

v1.clear()  //清空v中的元素

v1.empty()  //判断v1是否为空

v1.push_back(a); //把 a 插入容器末尾
v1.pop_back();  //删除v1的最后一个元素

v5.insert(v5.begin(),8); //在v5的0号位置添加元素 8
v5.insert(v5.begin()+2,3,9);  //在v5的2号位置添加3个9
v5.insert(v5.begin()+3,a+1,a+4); //a是一个数组,在v5的3号位置添加数组a的一号位置(包括)到4号位置(不包括)的元素
v5.erase(v5.begin(),v5.begin()+2);  //删除 v5 的0号元素开始(包括0号元素),到2号元素(不包括2号元素)
v5.erase(v5.begin()+2);          //删除v5的 2 号元素,并返回2号元素后面的元素,也就是现在的 2 号元素

v5.size();  //返回vector容器中元素的个数
v2.capacity();  //返回v2在内存中可以容纳的元素个数
v2.resize(3); //将v2的元素个数设置为3,多则删,少则补,其值随机
v2.reserve(100);  //将v2的容量大小设置为100

v1.swap(v2);  //交换v1,v2容器的值

vector容器还可以进行 == != >= > <= < 的比较

vector的下标可以用来获取存在的元素
int a = v[2];v[2] = a;

迭代器

通过迭代器访问v5中的元素

vector<int>::iterator it = v5.begin();
while(it < v5.end()){
    cout<< *it<<" ";
    it++;
}

补充

sort(v5.begin(),v5.end());  //对v5的数据进行排序

reverse(v5.begin(),v5.end()); //把v5的数据颠倒过来

二维vector

vector<vector<int>> v(3);
for(int i = 0;i < v.size();i++){
    for(int j = 2;j < 5;j++){
        v[i].push_back(j);
    }
}

for(int i = 0;i < v.size();i++){
    for(int j = 0;j < v[i].size();j++){
        printf("%d\t",v[i][j]);
    }
    putchar('\n');
}

//结果
2       3       4       
2       3       4       
2       3       4  

二维vector

vector<vector<int>> v(10,vector<int>(20,1))  //新建一个10行 20列的动态数组,初值为1

deque

deque是顺序容器,支持随机访问迭代器。
vector有的操作它都有,它的随机存取元素可以在常数时间内完成但是慢于vector。
除此之外它还有两个成员函数

void push_front(val);  //将val加入倒deque的头部
void pop_front();        //删除头部的元素
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值