C++Vector操作

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

注意插入或删除中间某一项需要线性时间,即把这个元素后面的所有元素往后移或者往前移。如果频繁移动,则效率很低。注意删除某一项是它后面所有的项(后面所有项看做一个整体)往前移动一位,而不是把删除的这一项变为0。a.clear()只是清空数据,系统为vector分配的内存还在。

做一个题能更好掌握,例题演示:
HDU4841“圆桌问题”
AC代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{	
	int n,m;
	vector<int>s;
	while(cin>>n>>m)
	{
		s.clear();
		for(int i=0;i<2*n;i++)
		  s.push_back(i);
		int pos=0;
		for(int i=0;i<n;i++)
		{
			pos=(pos+m-1)%s.size();
			s.erase(s.begin()+pos);//处死n个坏人。 
		}
		int j=0;
		for(int i=0;i<2*n;i++)
		{
			if(i%50==0&&i) cout<<endl;
			if(i==s[j]&&j<s.size())//j<s.size(),防止vector越界。 
			{
			  j++; 					
			  cout<<"G";
			}
			else
			  cout<<"B";
	    }
		cout<<endl<<endl; 
	}
 } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值