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++标准库 ...
随机推荐
- 【python cookbook】【数据结构与算法】2 从任意长度的可迭代对象中分解元素
从某个可迭代对象中分解出N个元素,但是可迭代对象的长度可能超过N,会出现“分解值过多”的异常: 使用“*表达式”来解决该问题: Python 3.4.3 (v3.4.3:9b73f1c3e601, F ...
- Java String类中的intern()方法
今天在看一本书的时候注意到一个String的intern()方法,平常没用过,只是见过这个方法,也没去仔细看过这个方法.所以今天看了一下.个人觉得给String类中加入这个方法可能是为了提升一点点性能 ...
- Hadoop之回收站
一.回收站简介: 在HDFS里,删除文件时,不会真正的删除,其实是放入回收站/trash,回收站里的文件可以快速恢复. 可以设置一个时间阀值,当回收站里文件的存放时间超过这个阀值或是回收站被清空时,文 ...
- Jetty 嵌入式开发(实例)
我尝试了jetty几个版本,类的使用有些差异,在此记录下jettyVersion = 9.0.2.v20130417 的部分实例 maven 依赖及配置: <properties> < ...
- set_include_path — 设置 include_path 配置选项为当前脚本设置 include_path 运行时的配置选项。
说明 string set_include_path ( string $new_include_path ) 为当前脚本设置 include_path 运行时的配置选项. 参数 new_includ ...
- awk 手册--【转载】
1. 前言 有关本手册 : 这是一本awk学习指引, 其重点着重于 : l awk 适于解决哪些问题 ? l awk 常见的解题模式为何 ? 为使读者快速掌握awk解 ...
- 【转】Eclipse Console 加大显示的行数,禁止弹出
转载地址:http://blog.csdn.net/leidengyan/article/details/5686691 Eclipse Console 加大显示的行数: 在 Preferences- ...
- 简单LRU算法实现缓存
最简单的LRU算法实现,就是利用jdk的LinkedHashMap,覆写其中的removeEldestEntry(Map.Entry)方法即可,如下所示: java 代码 import java.ut ...
- NotificationObject.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.C ...
- zend studio 注释快捷键
使用zend studio编写程序时,我们经常要做一些注释.zend studio为我们提供了行注释和块注释的快捷键ctrl+slash和ctrl+shift+slash,开始不明白什么是slash, ...