“人造太阳”计划

常用算法

非 Y 不嫁゛ 提交于 2019-11-28 21:36:13
sort默认从小到大 排序普通类型 bool complare(int a, int b) { return a < b; // 从小到大, 形参顺序不变, 看大小号判断排序顺序 return a > b; // 从大到小 } int a[10] = { 1, 7, 4, 0, 9, 4, 8, 8, 2, 4 }; sort(a, a + 10); // 数组长度 sort(a, a + 10, complare); 排序vector bool complare(int a, int b) { return a > b; } vector<int> vt; for (int i = 0; i < 10; i++) { vt.push_back(static_cast<int>(rand() % 10)); } for (auto v : vt) cout << v << " "; cout << endl; sort(vt.begin(), vt.end(), complare); for (auto v : vt) cout << v << " "; cout << endl; swap交换两个对象的值 myClass c1, c2; swap(c1, c2); 最值 int a = 1, b = 2; cout << max(a, b) << ' ' << endl;

再探迭代器(插入迭代器、流迭代器、反向迭代器、移动迭代器)

ⅰ亾dé卋堺 提交于 2019-11-28 20:02:45
除了为每个容器定义的迭代器之外,标准库在头文件iterator中还定义了额外几种迭代器。这些迭代器包括以下几种。 插入迭代器:这些迭代器被绑定到一个容器上,可用来向容器插入元素 流迭代器:这些迭代器被绑定到输入或输出上,可用来遍历所有关联的IO流 反向迭代器:这些迭代器向后而不是向前移动。除了forward_list之外的标准库容器都有反向迭代器 移动迭代器:这些专用的迭代器不是拷贝其中的元素,而是移动它们。 1 插入迭代器 插入器是一种迭代器适配器,它接受一个容器,生成一个迭代器,能实现向给定容器添加元素。当我们通过一个迭代器进行赋值时,该迭代器调用容器操作来向给定容器的指定位置插入一个元素。下表列出了这种迭代器支持的操作。 插入迭代器操作 it=t           在it指定的当前位置插入值t。假定c是it绑定的容器,依赖于插入迭代器的不同种类,此赋值分别调用c.push_back(t)、c.push_front(t)或c.insert(t,p),其中p为传递给inserter的迭            代器位置 *it,++it,it++        这些操作虽然存在,但不会对it做任何事情。每个操作都返回it 插入迭代器有三种类型,差异在于元素插入的位置: back_inserter创建一个使用push_back的迭代器 front

Vector 嵌套

淺唱寂寞╮ 提交于 2019-11-28 18:59:13
int main() { int n,m,k; cin>>n>>m; vector< vector<int> > vc; rep(1,n) { vector<int>vec; for(int j=0;j<=m;j++) { cn(k); vec.push_back(k); } vc.push_back(vec); } rep(0,n-1) { for(int j=0;j<=m;j++) ct vc[i][j] <<" "; ct endl ; } vector< vector<int> >::iterator iter; vector<int>::iterator it; for(iter=vc.begin();iter!=vc.end();iter++) { for(it=(*iter).begin();it<(*iter).end();it++) ct *it <<" "; ct endl; } } 2 3 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 int main() { int n,m,k; cin>>n>>m; vector< vector<int> > vc; vector<int>vec; rep(1,n) { for(int j=0;j<=m;j++) { cn(k); vec.push_back(k); }

8.26 | 学习笔记

时光总嘲笑我的痴心妄想 提交于 2019-11-28 16:32:57
从EOJ上的DNA排序题开始,这个题目有两个测试点总是超时,万分感谢有学长❤指出问题,原来的两层遍历时间复杂度有问题,所以顺势学习map; 感觉有两个难点,一是迭代器,二是按照value排序; 一、迭代器 迭代器一直感觉很高端的样子,从行为上看暂时可以理解为指针?如果不用迭代器连访问都很困难,而且高端一点的容器涉及到的STL函数比如find返回值都是迭代器 二、按照value排序 map会按照key排序,在CSDN上没找到其他方法能按照value排序的,所以折中一下,把map中的pair对放在vector里,然后自己写一个cmp,就可以用sort啦 AC代码记录一下 #include <bits/stdc++.h> using namespace std; int t,cnt; string tmp; typedef pair<string,int>dnapair; map<string,int>dna; vector<dnapair>v; map<string,int>::iterator iter; vector<dnapair>::iterator iter2; bool cmp(dnapair a,dnapair b) { if(a.second!=b.second)return a.second<b.second; return a.first<b.first; }

Python之函数(六)迭代器与递归

我们两清 提交于 2019-11-28 16:19:59
4.8 迭代器 可迭代对象 # 迭代: 器:工具 # 可迭代对象 # list,dict,str,set,tuple -- 可迭代对象 使用灵活 #迭代对象判断 #方式一 #对象具有__iter__()方法则为迭代对象 #方式二 #查看源码 CTRL+鼠标左键 #方式三 #print(dir(list)) 查看是否有__iter__()方法 #官方声明只要具有__iter__()方法的就是可迭代对象 #可迭代对象的优点: # 使用 灵活 # 直接查看值 #可迭代对象的缺点: #占位内存 #取值方式: #list str tuple --索引 #dict --键 #set -- 直接取值 迭代器 #官方声明只要具有__iter__()方法__next__()方法就是迭代器 f = open("xxxx","w") f.__iter__() f.__next__() lst=[1,2,3] new_lst=lst.__iter__()#将可迭代对象转换成迭代器 new_lst.__iter__() new_lst.__next__() for循环的本质 s="123" count=len(s) new_s=s.__iter__() while count: print(new_s.__next__()) count-=1 #结果为:3 2 1 #for 循环真实本质 s="123"

C++ algorithm算法库

佐手、 提交于 2019-11-28 15:20:04
C++ algorithm算法库 Xun 标准模板库(STL)中定义了很多的常用算法,这些算法主要定义在 <algorithm> 中。编程时,只需要在文件中加入 #include<algorithm> 即可方便地使用这些算法。若要用好这些函数,你必须了解以下几个概念: 容器 容器是用来存放各种数据的一个东西, <algorithm> 中的算法是针对容器设计的。因此,不论数据是一些 int , char 还是自定义的 class , <algorithm> 中的函数都可以正确应对。 vector 是最常用的容器。 迭代器 迭代器是与容器进行配套使用的。它的作用是对容器中的元素进行遍历,比如数组的指针就可以看作一种迭代器。迭代器一般支持解引用( operator*() )、自加( operator++() )、相等( operator==() )等操作。 谓词 谓词是用来对 <algorithm> 中的函数进行定制操作的。谓词可以是lambda表达式或是函数/函数指针,并且 <algorithm> 中只有一元谓词和二元谓词,即函数只能接收一个或两个参数。对于需要额外参数的谓词可以使用lambda表达式的捕获功能。 pair 部分算法会有两个返回值, pair 有两个成员 first 和 second ,用来将两个值进行打包返回。 下面的内容主要来源于《C++ Primer

手写一个python迭代器

纵然是瞬间 提交于 2019-11-28 14:54:31
分析 我们都知道一个可迭代对象可以通过iter()可以返回一个迭代器。 如果想要一个对象称为可迭代对象,即可以使用for,那么必须实现__iter __()方法。 在一个类的实例对象想要变成迭代器,就必须实现__iter__()和__next__()方法。 调用iter()时,在对象内部默认调用__iter__(),即__iter__()的返回值应该是一个迭代器。 for的每次循环中或者next()时,都是自动调用迭代器的__next__()方法,并有一个返回值。 实现 class Classmate: def __init__(self): self.names = [] self.num = 0 def add(self, name): self.names.append(name) def __iter__(self): return self def __next__(self): if self.num < len(self.names): ret = self.names[self.num] self.num += 1 return ret else: raise StopIteration c = Classmate() c.add("张三") c.add("李四") c.add("王五") for i in c: print(i) """ 张三 李四 王五 """

迭代器整理版

你。 提交于 2019-11-28 13:18:49
3. 迭代器 3.1 可迭代对象    1) 可迭代对象定义 对于迭代器来说,我们更熟悉的应该是可迭代对象,之前无论是源码还是讲课中或多或少我们提到过可迭代对象这个词。之前为了便于大家理解可迭代对象,可能解释的不是很正确,所以今天我们正式的聊一聊什么是可迭代对象。从字面意思来说,我们先对其进行拆解:什么是对象?Python中一切皆对象,之前我们讲过的一个变量,一个列表,一个字符串,文件句柄,函数名等等都可称作一个对象,其实一个对象就是一个实例,就是一个实实在在的东西。那么什么叫迭代?其实我们在日常生活中经常遇到迭代这个词儿,更新迭代等等,迭代就是一个重复的过程,但是不能是单纯的重复(如果只是单纯的重复那么他与循环没有什么区别)每次重复都是基于上一次的结果而来。比如你爹生你,你生你爹,哦不对,你生你儿子,你儿子生你孙子等等,每一代都是不一样的;还有你使用过得app,微信,抖音等,隔一段时间就会基于上一次做一些更新,那么这就是迭代。可迭代对象从字面意思来说就是一个可以重复取值的实实在在的东西。 那么刚才我们是从字面意思分析的什么是可迭代对象,到目前为止我们接触到的可迭代对象有哪些呢? str list tuple dic set range 文件句柄等,那么int,bool这些为什么不能称为可迭代对象呢?虽然在字面意思这些看着不符合

可迭代对象,迭代器对象,for循环

时光毁灭记忆、已成空白 提交于 2019-11-28 12:48:56
迭代器:迭代的工具。迭代是更新换代,如你爷爷生了你爹,你爹生了你,迭代也可以说成是重复,并且但每一次的重复都是基于上一次的结果来的。如计算机中的迭代开发,就是基于软件的上一个版本更新。以下代码就不是迭代,它只是单纯的重复 while True: print(' ' 10) 一、可迭代对象 python中一切皆对象,如 x = 1 name = 'nick' lis = [1, 2] tup = (1, 2) dic = {'name': 'nick'} s1 = {'a', 'b'} def func(): pass f = open('49w.txt', 'w', encoding='utf-8) 对于这一切的对象中,但凡有__iter__方法的对象,都是可迭代对象。 x = 1.__iter__ # SyntaxError: invalid syntax 以下都是可迭代的对象 name = 'nick'.__iter__ lis = [1, 2].__iter__ tup = (1, 2).__iter__ dic = {'name': 'nick'}.__iter__ s1 = {'a', 'b'}.__iter__ f = open('49w.txt', 'w', encoding='utf-8') f.__iter__ f.close() 1.1 总结 可迭代的对象

DBUS基础知识

℡╲_俬逩灬. 提交于 2019-11-28 12:26:49
1. 进程间使用D-Bus通信 D-Bus是一种高级的进程间通信机制,它由freedesktop.org项目提供,使用GPL许可证发行。D-Bus最主要的用途是在Linux桌面环境为进程提供通信,同时能将Linux桌面环境和Linux内核事件作为消息传递到进程。D-Bus的主要概率为总线,注册后的进程可通过总线接收或传递消息,进程也可注册后等待内核事件响应,例如等待网络状态的转变或者计算机发出关机指令。目前,D-Bus已被大多数Linux发行版所采用,开发者可使用D-Bus实现各种复杂的进程间通信任务。 2. D-Bus的基本概念 D-Bus是一个消息总线系统,其功能已涵盖进程间通信的所有需求,并具备一些特殊的用途。D-Bus是三层架构的进程间通信系统,其中包括: 接口层:接口层由函数库libdbus提供,进程可通过该库使用D-Bus的能力。 总线层:总线层实际上是由D-Bus总线守护进程提供的。它在Linux系统启动时运行,负责进程间的消息路由和传递,其中包括Linux内核和Linux桌面环境的消息传递。 包装层:包装层一系列基于特定应用程序框架的Wrapper库。 D-Bus具备自身的协议,协议基于二进制数据设计,与数据结构和编码方式无关。该协议无需对数据进行序列化,保证了信息传递的高效性。无论是libdbus,还是D-Bus总线守护进程,均不需要太大的系统开销。 总线是D