begin

STL-deque 双端数组简析

青春壹個敷衍的年華 提交于 2020-01-28 20:14:27
1 #include <iostream> 2 #include <deque> 3 4 using namespace std; 5 6 int main() 7 { 8 // 插入 9 deque<int> de; 10 for(int i=0;i<5;++i) 11 { 12 de.push_back(i); 13 } 14 15 for(int i=1;i<=5;++i) 16 { 17 de.push_front(i*10); 18 } 19 20 for(deque<int>::iterator it=de.begin();it!=de.end();++it) 21 { 22 cout<<*it<<" "; 23 } 24 cout<<endl; 25 26 // 删除 27 de.pop_back(); 28 de.pop_front(); 29 for(deque<int>::iterator it=de.begin();it!=de.end();++it) 30 { 31 cout<<*it<<" "; 32 } 33 cout<<endl; 34 35 // 求当前迭代器位置 36 for(deque<int>::iterator it=de.begin();it!=de.end();++it) 37 { 38 cout<<distance(de.begin()

Linux Shell常用技巧(五)

不打扰是莪最后的温柔 提交于 2020-01-28 19:25:40
十一. awk编程: 1. 变量: 在awk中变量无须定义即可使用,变量在赋值时即已经完成了定义。变量的类型可以是数字、字符串。根据使用的不同,未初始化变量的值为0或空白字符串" ",这主要取决于变量应用的上下文。下面为变量的赋值负号列表: 符号 含义 等价形式 = a = 5 a = 5 += a = a + 5 a += 5 -= a = a - 5 a -= 5 *= a = a * 5 a *= 5 /= a = a / 5 a /= 5 %= a = a % 5 a %= 5 ^= a = a ^ 5 a ^= 5 /> awk '$1 ~ /Tom/ {Wage = $2 * $3; print Wage}' filename 该命令将从文件中读取,并查找第一个域字段匹配Tom的记录,再将其第二和第三个字段的乘积赋值给自定义的Wage变量,最后通过print命令将该变量打印输出。 /> awk ' {$5 = 1000 * $3 / $2; print}' filename 在上面的命令中,如果$5不存在,awk将计算表达式1000 * $3 / $2的值,并将其赋值给$5。如果第五个域存在,则用表达式覆盖$5原来的值。 我们同样也可以在命令行中定义自定义的变量,用法如下: /> awk -F: -f awkscript month=4 year=2011

搜索与回溯算法(三)

≡放荡痞女 提交于 2020-01-28 05:00:19
本节学习要点: 1、 深度优先搜索的基本思想是什么? 2、 深度优选搜索的基本框架(用回溯递归实现) 3、 深度优先搜索算法要点 4、 搜索与回溯练习题二部分试题讲解。 搜索是人工智能中的一种基本方法,也是信息学竞赛选手所必须熟练掌握的一种方法,它最适合于设计基于一组生成规则集的问题求解任务,每个新的状态的生成均可使问题求解更接近于目标状态,搜索路径将由实际选用的生成规则的序列构成。我们在建立一个搜索算法的时候.首要的问题不外乎两个:以什么作为状态?这些状态之间又有什么样的关系?其实.在这样的思考过程中.我们已经不知不觉地将一个具体的问题抽象成了一个图论的模型——树(如图7-l所示)。 状态对应着顶点.状态之间的关系(或者说从一个状态到另一个状态的形成过程即生成规则)对应着边。这样的一棵树就叫做搜索树。初始状态对应着根结点,目标状态对应着目标结点。我们的任务就是找到一条从根结点到目标结点的路径——一个成功的解。搜索算法的实现类似于图或树的遍历,通常可以有两种不同的实现方法:深度优先搜索( DFS——Depth First Search )和宽度优先搜索( BFS——Breadth First Search ). 1 、深度优先搜索的基本思想: 如算法名称那样,深度优先搜索所遵循的搜索策略是尽可能“深”地搜索树。在深度优先搜索中,对于当前发现的结点

Linux Shell常用技巧(五)

ⅰ亾dé卋堺 提交于 2020-01-28 04:53:15
十一. awk编程: 1. 变量: 在awk中变量无须定义即可使用,变量在赋值时即已经完成了定义。变量的类型可以是数字、字符串。根据使用的不同,未初始化变量的值为0或空白字符串" ",这主要取决于变量应用的上下文。下面为变量的赋值负号列表: 符号 含义 等价形式 = a = 5 a = 5 += a = a + 5 a += 5 -= a = a - 5 a -= 5 *= a = a * 5 a *= 5 /= a = a / 5 a /= 5 %= a = a % 5 a %= 5 ^= a = a ^ 5 a ^= 5 /> awk '$1 ~ /Tom/ {Wage = $2 * $3; print Wage}' filename 该命令将从文件中读取,并查找第一个域字段匹配Tom的记录,再将其第二和第三个字段的乘积赋值给自定义的Wage变量,最后通过print命令将该变量打印输出。 /> awk ' {$5 = 1000 * $3 / $2; print}' filename 在上面的命令中,如果$5不存在,awk将计算表达式1000 * $3 / $2的值,并将其赋值给$5。如果第五个域存在,则用表达式覆盖$5原来的值。 我们同样也可以在命令行中定义自定义的变量,用法如下: /> awk -F: -f awkscript month=4 year=2011

链表实现快速排序

六月ゝ 毕业季﹏ 提交于 2020-01-27 15:15:32
javascript中实现一个链表的快速排序 class Node { constructor (value) { this.val = value this.next = undefined } } class NodeList { constructor (arr) { let head = new Node(arr.shift()) let next = head arr.forEach(item => { next.next = new Node(item) next = next.next }) return head } } let swap = (p, q) => { let val = p.val p.val = q.val q.val = val } let partion = (begin, end) => { let val = begin.val let p = begin let q = begin.next while (q !== end) { if (q.val < val) { p = p.next swap(p, q) } q = q.next } // 让基准元素跑到中间去 swap(p, begin) return p } export default function sort (begin, end) { if (begin !==

pat甲级1044二分查找

北慕城南 提交于 2020-01-27 02:43:11
1044 Shopping in Mars(25 分) Shopping in Mars is quite a different experience. The Mars people pay by chained diamonds. Each diamond has a value (in Mars dollars M$). When making the payment, the chain can be cut at any position for only once and some of the diamonds are taken off the chain one by one. Once a diamond is off the chain, it cannot be taken back. For example, if we have a chain of 8 diamonds with values M$3, 2, 1, 5, 4, 6, 8, 7, and we must pay M$15. We may have 3 options: Cut the chain between 4 and 6, and take off the diamonds from the position 1 to 5 (with values 3+2+1+5+4=15).

C++中Vector的用法

北慕城南 提交于 2020-01-26 19:15:03
Vector功能 1.Vector是一个在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。 2.是一个能够存放任意类型的动态数组。 3.vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。 4.向量长度较长时效率比较低。 基本函数实现 1.构造函数 vector():创建一个空vector vector(int nSize):创建一个vector,元素个数为nSize vector(int nSize,const t& t):创建一个vector,元素个数为nSize,且值均为t vector(const vector&):复制构造函数 vector(begin,end):复制[begin,end)区间内另一个数组的元素到vector中 2.增加函数 void push_back(const T& x):向量尾部增加一个元素X iterator insert(iterator it,const T& x):向量中迭代器指向元素前增加一个元素x iterator insert(iterator it,int n,const T& x):向量中迭代器指向元素前增加n个相同的元素x iterator insert(iterator it,const_iterator first,const_iterator last

旋转数组的最小数字

那年仲夏 提交于 2020-01-26 09:39:01
旋转数组的最小数字 1.题目描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。你可以假设数组中不存在重复元素。 示例 1: 示例 2: 2.思路(二分搜索) 1.如果数组只有一个元素,直接返回nums[begin]。 2.如果nums[end] > nums[begin],说明数组是有序递增的,直接返回nums[begin]。 3.如果mid = begin + (begin + end) / 2到达数组的边界: (1)nums[mid] > nums[mid + 1],则返回nums[mid + 1]。 (2)num[mid - 1] > nums[mid],则返回nums[mid]。 4.二分搜索: (1)如果nums[mid] > nums[begin],说明nums[mid]在前面的递增数组中,最小值应该在后面,因此begin = mid + 1。 (2)如果nums[mid] < nums[end],说明nums[mid]在后面的递增数组中,最小值应该在前面,因此end = mid - 1。 3.代码 class Solution { public : int findMin ( vector < int > & nums ) { /

C++动态数组(vector)

馋奶兔 提交于 2020-01-26 05:23:56
动态数组简介 有时候,我们在做题时会思考数组到底应该有多大才合适,有时可能不得而知。所以希望能够在运行时具有改变数组大小的能力。这也就出现了所谓的动态数组,动态数组是指在声明时没有确定数组大小的数组。动态数组可以在任何时候改变大小,既灵活又方便,有助于有效管理内存。 但是大部分情况下,我们还是使用静态数组的,尤其是在打比赛的时候。但是有时如果我们用静态数组空间会炸,所以只好用动态数组。但是动态数组又不太好写,因此C++的SLT给出了一个容器vector来帮助我们。 vector容器 所在头文件: vector 定义:(其中Type为类型,如int,char,结构体,string等等) vector < Type > v ; //默认初始化 v为空 vector < Type > v ( v1 ) ; //用v1定义v vector < Type > v ( n ) ; //v有n个值为0的元素 vector < Type > v ( n , x ) ; //v有n个值为x的元素 vector < Type > v [ MAXN + 10 ] ; //第一维大小是(MAXN + 10),第二维是动态的二维数组 常用操作: v [ i ] ; //v的第i个元素 v . clear ( ) //清空v v . push_back ( x ) ; //在尾部添加元素 v . pop

c++ list使用方式

三世轮回 提交于 2020-01-25 10:17:29
c++ list 定义和初始化 listlst1; // 创建空list listlst2(6); //创建含有6个元素的list listlst3(3, 2); // 创建含有三个元素的list listlst4(lst2); // 使用ls2初始化ls4 listlst5(lst2.begin(), lst2.end()); // 同ls4 list常用操作函数 lst1.assign() // 给list赋值 lst1.front() // 返回第一个元素 lst1.back() // 返回最后一个元素 lst1.begin() // 返回指向第一个元素的迭代器 lst1.end() // 返回末尾的迭代器 lst1.insert() // 插入一个元素到list中 lst1.erase() // 删除一个元素 lst1.pop_back() // 删除最有一个元素 lst1.pop_front() // 删除第一个元素 lst1.clear() // 删除所有元素 lst1.remove(const T & val) // 删除和val相等的元素 lst1.push_back() // 在list的末尾添加一个元素 lst1.push_front() // 在list的首部添加一个元素 lst1.empty() // 判断,若list为空返回true lst1.max