STL--list
List-概述:
|
list <TYPE> c |
产生一个空list,其中没有任何元素 |
|
list<TYPE> c1(c2) |
产生一个与c2同型的list(每个元素都被复制) |
|
list<TYPE> c(n) |
产生拥有n个元素的list,都以default构造函数初始化 |
|
list<TYPE> c(n, type) |
产生拥有n个元素的list,每个元素都是type的副本 |
|
list<TYPE> c (beg, end) |
产生一个list,并以[start, end)区间内的元素为初始 |
|
c.~list<TYPE>() |
销毁所有元素,释放内存 |
|
TYPE &back() TYPE &front() |
返回对最后一个元素的引用 返回对第一个元素的引用 |
|
iterator begin() iterator end() |
返回指向第一个元素的迭代器 返回指向末尾(最后一个元素之后)的迭代器 |
|
void clear() |
清空链表 |
|
bool empty() |
如果链表为空返回true,否则返回false |
|
iterator erase(iterator pos) iterator erase(iterator start, iterator end) |
删除pos所指元素并返回下一元素迭代器 删除[start, end)之间的元素,并返回最后一个被删除元素的下一个元素的迭代器 |
|
iterator insert( iterator pos, const TYPE &val ) |
插入一个值为value的元素在pos位置并返回其迭代器,原pos及以后的元素后移 |
|
void insert( iterator pos, size_type num, const TYPE &val) |
插入num个值为value的元素在pos位置,原pos及以后元素后移 |
|
…… |
链表实现
#include <iostream>
#include <list>
using namespace std; int main()
{
int n, k, m;
cout << "请分别输入总人数: n, 开始位置: k, 循环节: m." << endl;
while (cin >> n >> k >> m)
{
if(k>n||n<||k<||m<)
{
cout << "输入有误, 请注意(k < n, k, m, n > 0)\n";
continue;
}
list<int> Li(n);
list<int>::iterator it = Li.begin(), pos = Li.begin(); // 用pos的指示走到的位置
// 初始化链表
for( int i = ; it != Li.end(); ++i, ++it)
*it = i; int t = (k-+n) % n + ;
while(--t) // 初始化 pos 指示的位置即:从(k-1)开始数
{
pos++;
if(pos == Li.end())
pos = Li.begin();
}
while(n--) // 队列中剩余的人数 n
{
int t = m;
while(t--) // 走m步
{
pos++;
if(pos == Li.end())
pos = Li.begin(); // 走 m 步后的pos指示的位置
}
cout << *pos << ", "; // 出队
it = pos; it--; // 用 it 暂存 pos的位置,由于pos将被删除,
//所以下次开始数的位置为现在pos所指位置的前一个位置
Li.erase(pos); // 删除 出队的人。
pos = it;
}
cout << endl << endl;
cout << "请分别输入总人数: n, 开始位置: k, 循环节: m." << endl; }
return ;
}
附数组实现
#include <iostream>
const int MAXN = ;
using namespace std; int n, k, m, a[MAXN]; int Move(int p, int t); // 输入开始位置 p, 固定循环长度t; 返回:出队人的位置 int main()
{
cout << "请分别输入总人数: n, 开始位置: k, 循环节: m." << endl;
while((cin >> n >> k >> m))
{
if(k>n)
{
cout << "输入有误, 请注意(k < n, k, m, n > 0)\n";
continue;
}
for(int i = ; i <= n; i++) a[i] = n;
int left = n; // left 为队列中还剩余的人数。
int p = k- + n;
while(left)
{
p = Move(p, m);
cout << p << ", ";
left--;
a[p] = ; // 标记这个位置的人已经出队。
}
cout << endl << endl;
cout << "请分别输入总人数: n, 开始位置: k, 循环节: m." << endl;
}
return ;
} int Move (int p, int t)
{
while(t--)
{
do { p = p % n + ; } while(a[p] == ); // 忽略已经出队的人
}
return p;
}
STL--list的更多相关文章
- 详细解说 STL 排序(Sort)
0 前言: STL,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算 ...
- STL标准模板库(简介)
标准模板库(STL,Standard Template Library)是C++标准库的重要组成部分,包含了诸多在计算机科学领域里所常见的基本数据结构和基本算法,为广大C++程序员提供了一个可扩展的应 ...
- STL的std::find和std::find_if
std::find是用来查找容器元素算法,但是它只能查找容器元素为基本数据类型,如果想要查找类类型,应该使用find_if. 小例子: #include "stdafx.h" #i ...
- STL: unordered_map 自定义键值使用
使用Windows下 RECT 类型做unordered_map 键值 1. Hash 函数 计算自定义类型的hash值. struct hash_RECT { size_t operator()(c ...
- C++ STL简述
前言 最近要找工作,免不得要有一番笔试,今年好像突然就都流行在线笔试了,真是搞的我一塌糊涂.有的公司呢,不支持Python,Java我也不会,C有些数据结构又有些复杂,所以是时候把STL再看一遍了-不 ...
- codevs 1285 二叉查找树STL基本用法
C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...
- STL bind1st bind2nd详解
STL bind1st bind2nd详解 先不要被吓到,其实这两个配接器很简单.首先,他们都在头文件<functional>中定义.其次,bind就是绑定的意思,而1st就代表fir ...
- STL sort 函数实现详解
作者:fengcc 原创作品 转载请注明出处 前几天阿里电话一面,被问到STL中sort函数的实现.以前没有仔细探究过,听人说是快速排序,于是回答说用快速排序实现的,但听电话另一端面试官的声音,感觉不 ...
- STL的使用
Vector:不定长数组 Vector是C++里的不定长数组,相比传统数组vector主要更灵活,便于节省空间,邻接表的实现等.而且它在STL中时间效率也很高效:几乎与数组不相上下. #include ...
- [C/C++] C/C++延伸学习系列之STL及Boost库概述
想要彻底搞懂C++是很难的,或许是不太现实的.但是不积硅步,无以至千里,所以抽时间来坚持学习一点,总结一点,多多锻炼几次,相信总有一天我们会变得"了解"C++. 1. C++标准库 ...
随机推荐
- Intel Edison 参考链接2
Edison的breakout板子的引脚: http://iotdk.intel.com/docs/master/mraa/java/edison.html Edison的引脚 http://www. ...
- 常用Git命令
Git教程:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 一般来说,日常使用只要 ...
- 使用python脚本监控weblogic
1.python的脚本如下: ############################################################################### #crea ...
- ASP.NET生成缩略图的代码
01. // <summary> 02. /// 生成缩略图 03. /// </summary> 04. /// &l ...
- Database
1.Mysql 本地计算机登陆mysql,(DOC界面)mysql -h 127.0.0.1 -u root -p
- 修改win7登录界面
只需两步,教你将喜欢的图片在设置成开机画面. 第一步,打开注册表,Win+R->运行->Regedit.依次展开,HKEY_LOCAL_MACHINE\SOFTWARE\Microso ...
- 在repeart中获取行数据
ItemCreated(){ if (e.Item.DataItem != null) { string examTypeId = ((DataRowView)e.Item.DataItem).Row ...
- Windows手动添加开机启动项
@方法1. 添加程序完整路径到注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run下 或者添加到HKEY_CURREN ...
- 遍历对象的list删除时报错问题。
我们对一个对象的list或者map进行删除操作时,可能会这么写 for(Distributor distributor:distributorList){ String distributorShor ...
- linux下查看电脑配置
1. 查看cpu ~$ cat /proc/cpuinfo 2. 查看内存占用 ~$ cat /proc/meminfo 3. 硬盘分区 $ cat /proc/partitions 4. ubunt ...