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++标准库 ...
随机推荐
- 161104、NoSQL数据库:key/value型之levelDB介绍及java实现
简介:Leveldb是一个google实现的非常高效的kv数据库,能够支持billion级别的数据量了. 在这个数量级别下还有着非常高的性能,主要归功于它的良好的设计.特别是LSM算法.LevelDB ...
- eclipse Juno Indigo Helios Galileo这几种版本的意思
Eclipse 3.1 版本代号 IO [木卫1,伊奥] Eclipse 3.2, 30-06-2006, Callisto projects, 版本代号 Callisto [木卫四,卡里斯托 ] ...
- 如何获取各大平台的播放地址(获得优酷的m3u8播放地址)为例
1.打开safari 2.在顶部(黑色小苹果)旁边,点击safari. 3.打开里面的 偏好设置. 4.在高级 中 找到 “在菜单栏中显示开发菜单” 并打勾. 5.关闭窗口后,可以发现safari 顶 ...
- oracle进制-10进制跟2进制互转
CREATE OR REPLACE FUNCTION NUMBER_TO_BIT(V_NUM NUMBER) RETURN VARCHAR IS V_RTN );--注意返回列长度 V_N1 NUMB ...
- easyrtc-server在ubuntu14.04上的安装方法
easyrtc 官网 http://easyrtc.com/ 1.安装nodejs,安装npm (不知道如何安装请google一下) 2. 查看运行easyrtc 所需要的js 包,在easyrtc ...
- ds.Merge 与 ds.Tables[0].Merge 的用法
DataSet ds = new DataSet(); SqlConnection conn = new SqlConnection(ConnectionStr); SqlCom ...
- hdu1074 Doing Homework
这题比较有意思,暴力搜索必然tle,可以用状态压缩dp解决. 我们先不考虑完成所有作业的扣分,而考虑其一个子集的情况. 假设我们得到了完成某子集S对应的作业最少扣分,我们试着向该子集中增加一个元素a, ...
- 修改datagridview中其中一列的值
控件.rows[0].cells['名'].value = 值
- 关于接收json以及使用json
Common: FileIO.cs using System; using System.Collections.Generic; //using System.Linq; using System. ...
- python请求java Selenium Webdriver
下载jar包: selenium-server-standalone-2.44.0.jar 运行jar包: java -jar selenium-server-standalone-2.44.0.ja ...