“人造太阳”计划

第4章 课后习题

强颜欢笑 提交于 2019-12-02 17:09:55
4.1、105 4.2、(a).*vec.begin() == *(vec.begin());  (b) *vec.begin() + 1 == *(vec.begin()+1) 4.3、我觉得可以接受(个人看法并非标准答案,仅作参考);这种缺陷只会求值顺序对表达式的最后结果有影响的时候出现,而如果求值顺序如果对最后结果有影响 那么避免这种缺陷本身就是编程人员的责任,编译器采用何种策略都是没有关系的 4.4、(((12/3)*4)+(5*15)) + ((24%4)/2) == 91; //p4_4.cpp #include <iostream> using namespace std; int main() { int a; a = 12/3*4+5*15+24%4/2; cout << "a = " << a << endl; return 0; } 4.5 a -86;  b -18;  c 0  d -2 4.6、 bool is_even = (inum%2 == 0) ? true:false; 4.7、表达式求值后得到的结果超出对应类型所能存储的最大值或最小值 4.8、逻辑与与逻辑或都是从左向右;与:当且仅当左面对象求值不能确定表达式的结果才对右边的表达式进行求值 相等性运算符对象的求值顺序是没有规定的 4.9 、先判断cp是一个非空指针再判断指向的值分空 4.10

迭代器

余生长醉 提交于 2019-12-02 16:44:34
#迭代器? 有iter方法和next方法 # l = [1,2,3,4,5] # i = iter(l) #<list_iterator object at 0x000001F0156DE088> 生成迭代器 # print(i) # print(next(i)) #1 # print(next(i)) #2 # print(next(i)) #3 # print(next(i)) #4 # print(next(i)) #5 # lo = [1, 2, 3, 4, 5, 6] # for y in lo: # ci = iter(lo) #列表转换成迭代器 # print(next(ci)) #还不能用 it = iter([1, 2, 3, 4, 5]) # 循环: while True: try: # 获得下一个值: x = next(it) print(x) except StopIteration: # 遇到StopIteration就退出循环 break 来源: https://www.cnblogs.com/TKOPython/p/11755470.html

leetcode13 罗马数字转整数

萝らか妹 提交于 2019-12-02 16:40:33
偷懒,就在12的基础上改了一下 class Solution { public: int romanToInt(string s) { map<int,string> calc = {{1000,"M"},{900,"CM"},{500,"D"},{400,"CD"},{100,"C"}, {90,"XC"},{50,"L"},{40,"XL"},{10,"X"},{9,"IX"},{5,"V"},{4,"IV"},{1,"I"}}; map<int,string>::reverse_iterator iter=calc.rbegin(); int ret=0; while(iter!=calc.rend()) { int len=(iter->second).length(); if(len>s.length()) iter++; else if(s.substr(0,len)==iter->second){ ret+=iter->first; s=s.substr(len); } else iter++; } return ret; } }; 来源: https://www.cnblogs.com/lqerio/p/11755350.html

11. 函数-三大器

戏子无情 提交于 2019-12-02 12:40:32
一、迭代器 1. 定义 ​ 对于list、string、tuple、dict等这些容器对象,使用for循环遍历是很方便的。在后台for语句对容器对象调用iter()函数。iter()是python内置函数。iter()函数会返回一个定义了next()方法的迭代器对象,它在容器中逐个访问容器内的元素。next()也是python内置函数。在没有后续元素时,next()会抛出一个StopIteration异常,通知for语句循环结束。 ​ 迭代器是用来帮助我们记录每次迭代访问到的位置,当我们对迭代器使用next()函数的时候,迭代器会向我们返回它所记录位置的下一个位置的数据。实际上,在使用next()函数的时候,调用的就是迭代器对象的_next_方法(Python3中是对象的_next_方法,Python2中是对象的next()方法)。所以,我们要想构造一个迭代器,就要实现它的_next_方法。但这还不够,python要求迭代器本身也是可迭代的,所以我们还要为迭代器实现_iter_方法,而_iter_方法要返回一个迭代器,迭代器自身正是一个迭代器,所以迭代器的_iter_方法返回自身self即可 2. 一些术语 迭代器协议:对象需要提供next()方法,它要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代。 可迭代对象:实现了迭代器协议对象。list

迭代器和生成器

旧时模样 提交于 2019-12-02 12:06:05
迭代器(iterator) 迭代器是在python2.2中被加入的,它为类序列对象提供了一个类序列的接口。有了迭代器可以迭代一个不是序列的对象,因为他表现出了序列的行为。 什么迭代器呢? 迭代器的实质是实现了next()方法的对象,常见的元组、列表、字典都是迭代器。 迭代器中重点关注两种方法: iter方法:返回迭代器自身。可以通过python内建函数iter()调用。 next方法:当next方法被调用的时候,迭代器会返回它的下一个值,如果next方法被调用,但迭代器没有值可以返回,就会引发一个StopIteration异常。该方法可以通过 python 内建函数next()调用。 举例 内建函数iter()可以从可迭代对象中获得迭代器。 >>> it = iter([1,2,3]) >>> next(it) 1 >>> next(it) 2 >>> next(it) 3 >>> next(it) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration >>> 迭代器是一个带状态的对象,他能在你调用next()方法的时候返回容器中的下一个值,任何实现了__iter__和__next__()(python2中实现next())方法的对象都是迭代器。 __iter_

python迭代器、生成器和装饰器

对着背影说爱祢 提交于 2019-12-02 12:01:56
文章目录 生成器 生成器表达式(generator expression) 通过使用yield关键字定义 生成器并行 前戏 高潮 迭代器 迭代器概述 iter()函数 创建迭代器 创建一个迭代器(类) 内置迭代器工具 count无限迭代器 cycle 无限迭代器,从一个有限序列中生成无限序列: itertools的子模块 islice 控制无限迭代器输出的方式 装饰器 高阶函数 嵌套函数 高阶函数+嵌套函数 = 装饰器 类装饰器 带参数的decorator 实例---登录认证 生成器 通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。 所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。 要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator: 生成器表达式(generator expression) L = [ x + 1 for x in range ( 10 )

支持向量机(Support Vector Machine / SVM)手写数字识别

妖精的绣舞 提交于 2019-12-02 03:51:13
手写数字识别的优化(有核函数) 训练算法:采用两种不同的核函数,并对径向基核函数采用不同的设置来运行SMO算法 测试算法:便携一个函数来测试不同的和函数并计算错误率 from numpy import * from time import sleep def loadDataSet(fileName): dataMat = []; labelMat = [] fr = open(fileName) for line in fr.readlines(): lineArr = line.strip().split('\t') dataMat.append([float(lineArr[0]), float(lineArr[1])]) labelMat.append(float(lineArr[2])) return dataMat,labelMat def selectJrand(i,m): j=i #we want to select any J not equal to i while (j==i): j = int(random.uniform(0,m)) return j def clipAlpha(aj,H,L): if aj > H: aj = H if L > aj: aj = L return aj def smoSimple(dataMatIn,

Python3基础-迭代器

房东的猫 提交于 2019-12-01 19:12:17
迭代器介绍 迭代器即用例迭代取值的工具,而迭代式重复反馈过程的活动,其目的通常是为了逼近所需的目标或结果,每一次对过程的重复成为一次”迭代“;而每一次迭代得到的结果会作为下一个迭代的初始值,单纯的重复并不是迭代  可迭代对象 1、语法形式上,内置有__iter__方法的对象都是可迭代对象 2、字符串、列表、元祖、字典、集合、打开的文件都是可迭代对象 str='susu' str_iter=str.__iter__() #字符串 print(str_iter) list=[1,2,'a'] list_iter=list.__iter__() #列表 print(list_iter) dict={'name':'susu','paaswd':'123456'} dict_iter=dict.__iter__() #字典 print(dict_iter) tup=(1,2,3,4) tup_iter=tup.__iter__() #元祖 print(tup_iter) set={1,2,3,4,'yuyu'} set_iter=set.__iter__() #集合 print(set_iter) with open('aa.txt','rb') as f: f_iter=f.__iter__() #打开的文件 print(f_iter) """ 执行结果 <str_iterator

C++11 —— 使用 thread 实现线程池

巧了我就是萌 提交于 2019-12-01 13:14:56
1. 引言 在新的 C++11 标准中,引入并发编程的一些基础组件: 线程(thread) 、 互斥锁(mutex) 、 条件变量(condition_variable) 等,凭借这些,就足够我设计一个平台无关的 线程池 组件了。下面就详细介绍一下这个线程池组件。 2. 结构设计图 需要特别说明的是,这个线程池组件,在增加了“存在关联性的任务对象顺序执行”的功能后,原本的任务队列就分成了两级任务队列,目的是为了降低 “任务提交” 与 “任务提取” 之间(属于一种生产/消费的关系)的锁竞争。 3. 源码说明 源码有点多,这里就不贴出来了,直接给下载地址: https://github.com/Gaaagaa/xthreadpool 。主要的线程池类 x_threadpool_t 在 xthreadpool.h 中已完整实现,在实际项目应用中,只需要 xthreadpool.h 这一个文件就足够了。 测试程序的编译命令: MSVC++2017:cl /EHsc main.cpp gcc :g++ -Wall -std=c++11 -lpthread -o main main.cpp 技术特点: 使用 C++11 的 thread 实现,可跨平台,亲测的编译器有 MSVC++2017、gcc 4.8.5、gcc 8.2.0; 支持传统的面向对象编程的任务对象类接口:继承抽象任务对象接口类

函数对象

寵の児 提交于 2019-12-01 09:49:33
数组 enum eRelation // 表示计算策略的枚举体 { eLess, // 小于 eEqual, // 等于 eGreater // 大于 }; template< typename T, typename ITER_TYPE> ITER_TYPE find_if_number( ITER_TYPE begin, ITER_TYPE end, eRelation relType, const T &target ) // 用数值表示策略的find_if函数 { for(ITER_TYPE iter = begin; iter!=end; iter++) // 遍历迭代器区间 { switch( relType ) // 根据不同的策略 { case eLess: if( *iter < target ) // 比较当前元素与目标 { return iter; // 返回迭代器 } case eEqual: if( *iter == target ) { return iter; } case eGreater: if( *iter > target ) { return iter; } } } return end; // 失败,则返回区间尾部 } int main(int argc, char *argv[]) // 主函数 { int ary[5] = {1,2,3