STL的 list :
- 双向链表。它的内存空间不必连续,通过指针来进行数据的访问,
- 高效率地在任意地方删除和插入,插入和删除操作是常数时间。
ist和vector的优缺点正好相反,它们的应用场景不同:
- (1)vector:插入和删除操作少,随机访问元素频繁;
- (2)list:插入和删除频繁,随机访问较少。
例题:
- hdu 1276 士兵队列训练问题
- 一队士兵报数:从头开始1至2报数,凡报到2的出列,剩下的向小序号方向靠拢,
- 再从头开始进行1至3报数,凡报到3的出列,剩下的向小序号方向靠拢,...,
- 以后从头开始轮流进行1至2报数、1至3报数直到剩下的人数不超过3人为止。
- 输入:士兵人数。
- 输出:剩下的士兵最初的编号。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t,n;
cin>>t;
while(t--)
{
cin>>n;
int k=2;
list<int> mylist; //定义
list<int>::iterator it;
for(int i=1; i<=n; i++)
mylist.push_back(i); //赋值
while(mylist.size() > 3)
{
int num = 1;
for(it = mylist.begin(); it != mylist.end(); )
{
if(num++ % k == 0)
it = mylist.erase(it);
else
it++;
}
k==2 ? k=3:k=2; //1至2报数,1至3报数
}
for(it = mylist.begin(); it != mylist.end(); it++)
{
if (it != mylist.begin())
cout << " ";
cout<<*it;
}
cout<<endl;
}
return 0;
}