7.7 c++

1.标准模板库STL

vector(动态数组)

vector中的元素在内存中是连续存储的。vector的实现是由一个动态数组构成。当空间不够的时候, 采用类似于C语言的realloc函数重新分配空间. 正是因为vector中的元素是连续存储的, 所以vector支持常数时间内完成元素的随机访问。

vector支持[]和at()遍历元素,由于结构上是数组,所以头插效果很低。~vector();释放空间。

实例

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

void printV(vector<int>&v){
   
	vector<int>::iterator it_s=v.begin();//迭代器的开头
	vector<int>::iterator it_e=v.end();//迭代器的末尾,指针指向最后一个元素的下一个
	printf("==========================\n");
	printf("SIZE=%d\n",v.size());
	while(it_s!=it_e){
   
		printf("%d ",*it_s++);
	}
	printf("\n");
	printf("==========================\n");
}


int main(){
   
	vector<int>a;//初始化1
	printf("一开始的大小:%d\n",a.size());
	a.push_back(1);
	a.push_back(2);
	printf("a添加过2个元素的大小:%d\n",a.size());

	vector<int>b(10,3);//初始化2
	printf("定义10个int型元素(元素都是3)的大小:%d\n",b.size());
	b.push_back(18);
	b.push_back(20);
	printf("c添加过2个元素的大小:%d\n",b.size());
	printV(b);

	vector<int>c(10);//初始化3
	printf("定义10个int型元素的大小:%d\n",c.size());
	for(int i=0;i<c.size()-2;i++){
   
	        c[i]=i;
	}
	printV(c);

	vector<int>d=c;//复制
	printf("将c复制给d\n");
	printV(d);

	d=b;
	printf("将b复制给d\n");
	printV(d);//复制

	vector<int>e (b.begin(),b.end());//初始化4
	printf("b的开始元素,b的最后一个元素\n");
	printV(e);

	vector<int>f (b.begin()+5,b.end());//初始化5
	printf("b的开始元素+5,b的最后一个元素\n");
	printV(f);

	b.resize(20);
	printf("对b进行填充\n");
	printV(b);

	b.resize(8);
	printf("对b进行缩小\n");
	printV(b);

	b.erase(b.begin()+2,b.end());//删除
	printV(b);
	printf("删除b中的元素\n");

	c.insert(c.begin()+2,b.begin(),b.end());//(从哪开始插入,插入什么到什么)
	printV(c);
	return 0;
}

在这里插入图片描述在这里插入图片描述

deque

deque与vector非常相似。它也采用动态数组管理元素,提供随机存取,有着和vector几乎一样的接口。不同的是deque的动态数组头尾都开放,因此能在头尾两端进行快速安插和删除。
deque与vector组织内存的方式不一样。在底层,deque按“页”(page)或“块”(chunk)来分配存储器,每页包含固定数目的元素。而vector只分配一块连续的内存。

n个人排成圈,报3的推出(下面的是13)

#include<iostream>
#include<deque>
#include<algorithm>

using namespace std;
int main(){
   
	deque<int>a;
	for(int i=1;i<=13;i++){
   
		a.push_back(i);//尾部追加
	}
	int k=0;
	while(a.size()){
   
		k++;
		int c=a
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值