“人造太阳”计划

C++ STL算法系列2---find ,find_first_of , find_if , adjacent_find的使用

主宰稳场 提交于 2019-12-22 02:11:10
一.find运算 假设有一个int型的vector对象,名为vec,我们想知道其中 是否包含某个特定值 。 解决这个问题最简单的方法时使用标准库提供的find运算: 1 // value we'll look for 2 int search_value = 42; 3 4 //call find to see if that value is present 5 vector<int>::const_iterator result = find(vec.begin() , vec.end() , search_value); 6 7 //report the result 8 cout<<"The value "<<search_value 9 <<(result == vec.end() ? " is not present" : "is present") 10 <<endl; 具体实现代码: 1 #include<iostream> 2 #include<vector> 3 #include<algorithm> 4 using namespace std; 5 6 int main() 7 { 8 // value we'll look for 9 int search_value = 42; 10 int ival; 11 vector<int> vec; 12 13

C++ STL基本容器的使用

僤鯓⒐⒋嵵緔 提交于 2019-12-21 21:05:52
  C++中有两种类型的容器:顺序容器和关联容器。顺序容器主要有vector、list、deque等。其中vector表示一段连续的内存,基于数组实现,list表示非连续的内存,基于链表实现,deque与vector类似,但是对首元素提供插入和删除的双向支持。关联容器主要有map和set.map是key-value形式,set是单值。map和set只能存放唯一的key,multimap和multiset可以存放多个相同的key.   容器类自动申请和释放内存,因此无需new和delete操作。   一、vector   vector基于模板实现,需包含头文件vector.   1.定义和初始化   //1.定义和初始化   vector vec1; //默认初始化,vec1为空   vector vec2(vec1); //使用vec1初始化vec2   vector vec3(vec1.begin(),vec1.end());//使用vec1初始化vec2   vector vec4(10); //10个值为的元素   vector vec5(10,4); //10个值为的元素   //2.常用操作方法   vec1.push_back(100); //添加元素   int size = vec1.size(); //元素个数   bool isEmpty = vec1

学习SVM,这篇文章就够了!(附详细代码)

ε祈祈猫儿з 提交于 2019-12-21 15:14:07
支持向量机 (SVM),一个神秘而众知的名字,在其出来就受到了莫大的追捧,号称最优秀的分类算法之一,以其简单的理论构造了复杂的算法,又以其简单的用法实现了复杂的问题,不得不说确实完美。 本系列旨在以基础化的过程,实例化的形式一探SVM的究竟。曾经也只用过集成化的SVM软件包,效果确实好。因为众人皆说原理复杂就对其原理却没怎么研究,最近经过一段时间的研究感觉其原理还是可以理解,这里希望以一个从懵懂到略微熟知的角度记录一下学习的过程。其实网络上讲SVM算法的多不胜数,博客中也有许多大师级博主的文章,写的也很简单明了,可是在看过之后,总是感觉差点什么,当然对于那些基础好的可能一看就懂了,然而对于像我们这些基础薄弱的,一遍下 来也 只能马马虎虎,过一两天后又忘了公式怎么来的了。 比如说在研究SVM之前,你是否听说过拉格朗日乘子法?你是否知道什么是对偶问题?你是否了解它们是怎么解决问题的?这些不知道的话,更别说什么是KKT条件了。话说像拉格朗日乘子法,在大学里面学数学的话,不应该没学过,但是你学会了吗?你知道是干什么的吗?如果那个时候就会了,那你潜质相当高了。作为一个过来人,我将以简单实例化形式记录自己的学习过程,力图帮助新手级学习者少走弯路。 1、 关于拉格朗日乘子法和KKT条件 1)关于拉格朗日乘子法 首先来了解拉格朗日乘子法,为什么需要拉格朗日乘子法呢?记住,有需要拉格朗日乘子法的地方

生成器-generator

时光毁灭记忆、已成空白 提交于 2019-12-21 09:07:35
您可能听说过,带有 yield 的函数在 Python 中被称之为 generator(生成器),何谓 generator ? 我们先抛开 generator,以一个常见的编程题目来展示 yield 的概念。 如何产生斐波拉契数列? 斐波那契数列 (Fibonacci sequence),又称 黄金分割 数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“ 兔子数列 ”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以 递归 的方法定义:F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*) 许多初学者都可以写出下面的函数: 方法一: 1 # 生成斐波那契数列前n个元素 2 def fab(n): 3 i = 0 4 a, b = 0, 1 5 while i < n: 6 print(a) 7 a, b = b, a + b 8 i += 1 执行 fab(6) 得出前6个元素: 0 1 1 2 3 5 结果没有问题,但函数的返回值为None,别的函数无法获取结果,复用性很差, 要提高 fab 函数的可复用性,最好不要直接打印出数列,而是返回一个 List。以下是 fab 函数改写后的第二个版本: 方法二: 1 #

递归调用

混江龙づ霸主 提交于 2019-12-21 01:48:45
def fact(n): if n == 1: return 1 return n * fact(n-1) print(fact(1)) print(fact(5)) print(fact(100)) #递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。 #使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。可以试试fact(1000): #print(fact(1000)) 这一句会出现错误,递归实际上是在栈中进行的,栈空间有限,因而递归次数不能太多 #解决递归调用栈溢出的方法是通过尾递归优化,事实上尾递归和循环的效果是一样的,所以,把循环看成是一种特殊的尾递归函数也是可以的。 #尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况 def fact2(): return fact_iter(n, 1) def fact_iter(Inum, product): if num = 1: return product

Python的可迭代对象、迭代器和生成器

痞子三分冷 提交于 2019-12-20 17:32:10
前言   在学习Python语言,不可避免遇到各种绕口的概念,比如可迭代对象、迭代器和生成器,新手看了第一印象就是一脸懵。为此,本文详细介绍和解释这些概念,让新手一看就会。   回顾Python中的数据存储结构,Python是用容器来存储数据,比如:list、dict、tuple、strset…等等,当数据量不大的时候用这些存储没什么问题,当数据量特别大甚至是无限的时候,就不能使用这些容器来存储了,于是Python有一种机制专门解决这种问题。 一、可迭代对象(iterable)和迭代器(iterator) 1.1 概念介绍   通俗点讲,可迭代对象就是可以产生迭代器的对象,所谓迭代器就像一个懒加载的工厂,本身不存储数据,只有你向它索要的时候临时给你生成数据。下面用一个例子来解释: >> > x = [ 1 , 2 , 3 ] >> > y = iter ( x ) >> > z = iter ( x ) >> > next ( y ) 1 >> > next ( y ) 2 >> > next ( z ) 1 >> > type ( x ) < class 'list' > >> > type ( y ) < class 'list_iterator' >   在这个例子中,x是一个list对象,是一个可迭代对象,通过iter()函数生成x的迭代器y,那么只有在调用next(

Python进阶之:iter

被刻印的时光 ゝ 提交于 2019-12-20 13:35:24
''' 在某些情况下,我们希望实例对象可被用于 for...in 循环,这时我们需要在类中定义 __iter__ 和 next(在 Python3 中是 __next__)方法, 其中,__iter__ 返回一个迭代对象,next 返回容器的下一个元素,在没有后续元素时抛出 StopIteration 异常。 ''' class Fib(object): def __init__(self): self.a,self.b = 0,1 def __iter__(self): # 返回迭代器本身 return self def __next__(self): # 返回容器的下一个元素 self.a,self.b = self.b,self.a + self.b return self.a def __getitem__(self, item): self.item = item fib = Fib() for i in fib: if i > 1000: break print(i) 来源: CSDN 作者: dianxiaoer 链接: https://blog.csdn.net/qq_32430761/article/details/103628240

LintCode 601: Flatten 2D Vector (iterator经典题)

陌路散爱 提交于 2019-12-19 00:57:13
Flatten 2D Vector Implement an iterator to flatten a 2d vector. Example Example 1: Input:[[1,2],[3],[4,5,6]] Output:[1,2,3,4,5,6] Example 2: Input:[[7,9],[5]] Output:[7,9,5] 注意这题不能用一个2D vector的copy,不然空间不满足要求。 解法1:利用C++的iterator 这题学到了很多iterator的知识。 一维和二维vector都有iterator,一维vector的iterator就好比指向每个元素的指针,二维vector的iterator就好比指向其中每个一维vector的指针。 空的一维和二维vector的begin()和end()相等。 *(iter++)先返回*iter,然后iter++。 跟*(i++)一回事。 iter像指针,但不能与指针比较。一个未初始化的iter不能与NULL比较。如果非要初始化,可将其初始化为对应container的end()。 即vector a = {1,2,3,4,5}; vector::iterator iter = a.end(); 代码如下: class Vector2D { public : Vector2D ( vector < vector <

Python可迭代对象与迭代器详解

牧云@^-^@ 提交于 2019-12-18 22:29:02
Python可迭代对象与迭代器详解 首先先来了解几个概念 可迭代对象 (Iterable) : 实现了 __iter__ 方法的对象就是可迭代对象 (生成迭代器的对象) 迭代器 (iterator) : __iter__ 方法返回的, 同时实现了 __iter__ 方法与 __next__ 方法的对象就是迭代器 (真正执行迭代的对象) 迭代: 调用迭代器的 __next__ 方法使之返回一个元素 迭代器耗尽: 迭代器主动抛出了 StopIteration 异常, 就表示迭代器耗尽, Python会自动处理这个异常 (迭代器同时也是可迭代对象, 可迭代对象不一定是迭代器) (可迭代对象是用来创建迭代器的, 迭代器是通过可迭代对象创建的, 真正执行迭代的是迭代器) 通过 iter(Iterable) 内置函数 创建迭代器 通过 next(iterator) 内置函数或者 iterator.send(object) 方法创建迭代器进行 迭代 实现迭代器 请仔细反复阅读以下代码, 可以复制到代码编辑器运行查看 # 可迭代对象 class MyIterable ( object ) : def __init__ ( self , items ) : self . items = items def __iter__ ( self ) : print ( 'MyIterable.__iter_

map 新鲜用法

孤街醉人 提交于 2019-12-18 20:44:41
auto it = 10LL; string str = "zhangsan"; std::map<string, string> map; map.insert(make_pair(str, str)); for (auto iter = begin(map); iter != end(map); ++iter) //通常写法 auto iter = map.begin() ; ....... { cout << iter->first.c_str() << endl; } return 0; 来源: CSDN 作者: 芒种、 链接: https://blog.csdn.net/weixin_38739598/article/details/103603695