vector容器
vector是一个STL的动态数组,在运行时能根据需要改变数组的大小,以数组的形式存储。
头文件为:
#include <vector>
定义vector容器
定义示例 | 说明 | |
---|---|---|
vector < int > a; | 默认初始化a为空 | |
vector < int > b(a); | 用b定义a | |
vector < int > a(100); | 定义a数组中有100各为0的元素 | |
vector < int > a(100,6); | 定义a数组中有100各为6的元素 | |
vector < string > a(10,“null”); | 定义10个值为null的元素,字符串类型 | |
vector < string > a(10,“hello”); | 定义10个值为hello的元素,字符串类型 | |
vector < string > b(a.begin(),a.end()); | 定义一个b数组,拷贝a |
常用操作
代码示例 | 说明 |
---|---|
a.push_back(100); | 在尾部添加元素 |
int size = a.size() | 获得元素个数 |
bool isEmpty = a.empty(); | 判断数组是否为空 |
cout<<a[0]<<endl; | 输出某个元素,和普通数组打印一样 |
a.insert(a.begin()+i,k | 在第i个位置插入元素k |
a.insert(a.begin()+i,10,2 | 在第i个位置插入10个元素,值为2 |
a.push_back(8); | 在尾部插入元素8 |
a.pop_back(); | 删除末尾元素 |
a.erase(a.begin()+2): | 删除第2号元素 |
a.erase(a.begin()+i,a.begin()+j | 删除第i到j-1之间的元素 |
a.resize(n) | 修改数组大小,改成n |
a.clear() | 清空数组 |
reverse(a.begin(), a.end() | 反转数组 |
sort(a.begin(),a.end()); | 排序,可设置排序区间 |
圆桌问题
Problem Description
圆桌上围坐着2n个人。其中n个人是好人,另外n个人是坏人。如果从第一个人开始数数,数到第m个人,则立即处死该人;然后从被处死的人之后开始数数,再将数到的第m个人处死……依此方法不断处死围坐在圆桌上的人。试问预先应如何安排这些好人与坏人的座位,能使得在处死n个人之后,圆桌上围坐的剩余的n个人全是好人。
Input
多组数据,每组数据输入:好人和坏人的人数n(<=32767)、步长m(<=32767);
Output
对于每一组数据,输出2n个大写字母,‘G’表示好人,‘B’表示坏人,50个字母为一行,不允许出现空白字符。相邻数据间留有一空行。
Sample Input
2 3
2 4
Sample Output
GBBG
BGGB
代码:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> table;
int n,m;
while(cin>>n>>m){
table.clear();
for(int i=0;i<2*n;i++){
table.push_back(i);
}
int pos = 0;
for(int i=0; i<n;i++){
pos = (pos +m -1) % table.size();
table.erase(table.begin() + pos);
}
int j=0;
for(int i=0;i<2*n;i++){
if(!(i%50) && i) cout<<endl;
if(j<table.size() && i==table[j]){
j++;
cout<<'G';
}
else{
cout<<'B';
}
}
cout<<endl<<endl;
}
return 0;
}