
c++基础
PYB不开心
这个作者很懒,什么都没留下…
展开
-
leetcode之N点成线问题
下面的代码没有精炼过,就写的比较罗嗦了。平面上任意N点,其中一条直线最多过几个点,这个题显然有O(n^2)的解法,关键的一点是一定要注意cornercase,比较多,我试了7,8次才过….首先考虑相同的点,这个要单独列出来,其次考虑不能用double表示斜率,用一个pair表示分数既可,所以要写gcd来化简,然后注意这里面有负数,所以进行构造的时候要定序,(1,-1),(-1,1)都要变成(-1,1原创 2017-04-03 09:00:28 · 793 阅读 · 0 评论 -
C++primer学习:面向对象程序设计(5):再探文本查询程序
这一节初步探讨了如何设计一个继承类体系。为我们前面所写的文本探测程序添加以下功能:(1):可以将查询结果进行|,&,~的运算.运算的优先级按照C++规定的表达式来进行.如Query(“hair”)|Query(“bird”);(2) : 添加一个历史系统,能够查询前面的进行的某个查询.并可以在其中增加内容并与其他查询组合.(3):允许用户在查询的时候做出限制,从给定范围中挑出匹配的行显示.这个体系的原创 2015-10-30 17:28:08 · 808 阅读 · 0 评论 -
C++primer学习:面象对象程序设计(5):容器与继承
我们不能在容器中保存不同类型的元素.即使它们是具有继承关系的类体系.一般来说,直接保存对象会导致派生类中的基类部分被忽略.所以我们通常采取用指针来保存对象。一般用智能指针进行保存.[练习]:定义一个存放Quote对象的vector和存放指针的vector来比较两者的不同.vector<shared_ptr<Quote>> baseket1; vector<Quote> baseket2;原创 2015-10-29 18:57:43 · 381 阅读 · 0 评论 -
C++primer学习:面向对象程序设计(2):抽象基类
新增了 纯虚函数,抽象基类的概念.出虚函数用=0声明,含有该类函数的类是抽象基类,它们用来表示一种通用概念,而不是具体的操作策略,因此不能定义抽象基类对象.我们通过对抽象基类的继承来定义实现具体策略的派生类.[练习]:定义一个Disc_quote的抽象基类,用来支持不同的折扣策略.然后重写Bulk_quote Limit_quote类。class Quote{public: Quote(原创 2015-10-28 12:43:45 · 363 阅读 · 0 评论 -
C++Primer学习:动态内存与智能指针(3)
[练习:]从文件中按行读入,放入一个StrBlob中,然后用一个StrBlobPtr打印出来.//bool operator(const StrBlobPtr & p){return p.curr != curr;}; 在类内部重载了!=StrBlob record; ifstream in_file("text.txt"); string line; while (getl原创 2015-10-14 20:11:49 · 353 阅读 · 0 评论 -
C++primer学习:关于upper_bound和lower_bound的探究.
今天花了将近一个小时仔细研究了这两个范型算法以及关联容器定义的同名函数.下面就来讲一讲它们的用法和一些细节.[1]首先是范型算法upper_bound与lower_bound;它们要求必须提供至少前向迭代器,且容器元素必须有序,每个算法都提供两个版本。lower_bound(beg,end,val)lower_bound(beg,end,val,cmp);//upper_bound形式一样主要探究原创 2015-10-29 19:29:14 · 1649 阅读 · 0 评论 -
C++primer学习:面向对象程序设计(3):访问控制与继承
每个类控制着成员对于派生类来说是否是可以访问的.需要注意procted的成员只对于派生类对象本身可以访问,但是派生类的成员函数和友元对于一个基类成员的procted成员没有访问特权.class Sneak:public Base{friend void clobber(Base&);//没有对Base procted对象的访问权利}公有,私有和受保护继承.派生列表中的访问说明符对于派生类成员能原创 2015-10-28 15:41:42 · 330 阅读 · 0 评论 -
C++primer学习:面象对象程序设计(1):定义基类和派生类
通过继承将基类和派生类联系在一起.新出现的知识点有虚函数,protected关键字,动态绑定.[练习]:定义Quote类,保存书的信息.作为一个基类,后续将会定义其他派生类(保存打折书籍的信息),以及一个打印书信息的函数(通过动态绑定来判断调用那种类的函数).class Quote{public: Quote() = default;//默认构造函数 Quote(const st原创 2015-10-28 12:06:58 · 514 阅读 · 0 评论 -
C++primer学习:面象对象程序设计(4):继承类中的作用域和拷贝控制
派生类的作用域嵌套在基类之中.在编译时进行的名字查找是由静态类型决定的.关键概念:在进行函数调用时,假设我们使用p->mem(),则执行以下四个步骤.首先确定p对应的静态类型,查找对应的mem,如果找不到,则依次在直接基类中不断查找直到到达继承链的顶端。如果找遍了任然找不到,则编译器将报错.一旦找到,则判断mem是否是虚函数,如果是虚函数,则编译器将在运行时确定运行哪个虚函数的版本.否则,将产生一个原创 2015-10-28 20:20:16 · 455 阅读 · 0 评论 -
C++Primer学习:智能指针与动态内存(2)
unique_ptr,它也是一种智能指针,但是某个时候只能有一个指向unique_ptr指向一个给定对象.//定义并初始化unique_ptr<int > p(new int(42));p = nullptr;//释放p.release();//放弃对指针的控制,返回指针.但是不释放所指对象p.reset();//释放所指对象p.reset(q);//释放所指对象,提供内置指针q,并令p指向原创 2015-10-14 15:12:14 · 335 阅读 · 0 评论 -
C++primer学习:智能指针与动态内存(1)
智能指针是新标准提供的一种管理动态内存的工具,它会自动的释放所管理的内存(如果所有对该对象的引用都不存在了)。定义智能指针的方式有make_shared<T>(args) shared_ptr p(q)练习:定义一个能够共享对象的类:StrBlob.需要用到智能指针,指向一个动态分配的内存.定义相应的构造函数.用到了initializer_list模板;同时注意重载const版本的f原创 2015-10-11 22:47:15 · 381 阅读 · 0 评论 -
C++primer学习:重载运算符(4)
可调用对象与function;[练习]:编写一个简单的桌面计算器使其能够处理二元运算.class Add{public: int operator()(int val1, int val2) { return val1+val2; }};int divide(int a, int b){ return a / b;}int main(){ auto subt原创 2015-10-27 14:08:55 · 356 阅读 · 0 评论 -
C++primer学习:重载运算符(3)
为StrBlobPtr编写解引用运算符*和箭头运算符.注意箭头运算符只能返回一个指针或者一个重载了箭头运算符的对象.string& operator*()const { auto p = check(curr, "deference past end"); return (*p)[curr]; }//返回所指string的引用 string* operator->()const { ret原创 2015-10-26 22:22:10 · 344 阅读 · 0 评论 -
条件运算符与逗号
[1]条件运算符?:是一个很有用的运算符号,运用的好可以大大简化我们的代码;首先它是从右向左进行的,也就是右结合.比如finalgrade= grade>90?”highpass”:grade>=75?”pass”grade>=60?:”lowpass”:”failure”;根据从右到左的运算,首先计算temp = grade>=60?”lowpass”:”failure”,然后计算grade>=7原创 2015-09-23 12:40:47 · 698 阅读 · 0 评论 -
C++primer学习:重载运算(2)
关系重载运算符bool operator!=(const StrVec& lhs, const StrVec& rhs){ return !(lhs == rhs);}bool operator==(const StrVec& lhs, const StrVec& rhs){ return(lhs.size() == rhs.size() && equal(lhs.eleme原创 2015-10-26 16:24:38 · 413 阅读 · 0 评论 -
运算符%
C++11的新特性规定(-m)%n与m%(-n)是不同的的结果.m%n不能匹配n的符号.例如5%-7和-5%7的答案是不同的.原创 2015-09-23 08:53:04 · 362 阅读 · 0 评论 -
poj1062解题报告:
Description:年轻的探险家来到了一个印第安部落里。在那里他和酋长的女儿相爱了,于是便向酋长去求亲。酋长要他用10000个金币作为聘礼才答应把女儿嫁给他。探险家拿不出这么多金币,便请求酋长降低要求。酋长说:”嗯,如果你能够替我弄到大祭司的皮袄,我可以只要8000金币。如果你能够弄来他的水晶球,那么只要5000金币就行了。”探险家就跑到大祭司那里,向他要求皮袄或水晶球,大祭司要他用金币来换,或原创 2015-10-11 15:06:29 · 936 阅读 · 0 评论 -
C++primer学习:类模板(1):函数模板,模板参数,实例化
模板是范型编程的基础[练习]:定义一个通用的函数模板,对两个元素进行比较.在定义模板的时候对模板实参的要求越少越好,比如这个函数里面就只要求定义了<符号函数参数一定要是const引用,这样有两个好处,第一避免拷贝,第二可以避免实参是不可以拷贝类型时发生错误.template <typename T> int compare(const T& a, const T& b){ return原创 2015-10-30 22:58:25 · 498 阅读 · 0 评论 -
ostringstream的用法
【本文来自】http://www.builder.com.cn/2003/0304/83250.shtml http://www.cppblog.com/alantop/archive/2007/07/10/27823.html 使用stringstream对象简化类型转换 C++标准库中的提供了比ANSI C的include include include int main() { st转载 2015-12-08 22:46:40 · 358 阅读 · 0 评论 -
高效大整数运算库-------An Efficient Library for BigInteger
———-高效的高精度大整数库———-————-本着锻炼一下编程和优化能力的目的,花了两个多星期完成了这个作品。具体的性能比较可以参考这个:性能比较0. 其实在1年多前刚刚开始学习C++的时候也曾经做过一个用字符串来表示大整数的练习,但是运行速度很慢,所以我首先将原来的代码翻了出来看了看,首先把所有的参数改成const &的类型,当时写的时候还不知道引用….所以结果就快了几倍。然后发现了karat原创 2017-03-23 16:53:00 · 2749 阅读 · 3 评论 -
C++项目:Json_parser
我的json parser/generator我的json parsergenerator- 功能简介1 解析器部分2 生成器部分3 测试部分- 部分实现1整体框架1json_value可能代表6个类型中的一种2json_tree执行具体的解析2 Literalnullfalsetrue3 Number的解析1首先我们了解number的格式以及错误输入2解析4 string原创 2017-02-01 18:35:10 · 4511 阅读 · 1 评论 -
k pair of min jaccard distance
一个作业题,计算13万个用户的相似程度,每个用户有两个列表(L,U),分别是喜欢的电影和不喜欢的电影。找到最相似的100对用户。jacard的计算公式:Jaccardij=(Li∩Lj)⋃(Ui∩UJ)(Li∪Lj)⋃(Ui∪UJ)Jaccard_{ij}=\frac{(L_i\cap L_j)\bigcup(U_i\cap U_J)}{(L_i\cup L_j)\bigcup(U_i\cup U_原创 2016-10-09 15:11:41 · 498 阅读 · 0 评论 -
使用C++11进行多线程归并排序:std::thread
相对于使用pthread来说,c++的标准库对多线程的编程封装的非常好,使用起来有如下几个优势:1:1:可以直接传递参数给函数,而不需要将它封装到一个结构体再转换成为void*传入。22:对于目标函数的要求不再是void*的返回类型,这样如果要使用一些内置的函数,就不需要进行单独封装成void*类型。==================================================原创 2016-09-12 20:57:07 · 3264 阅读 · 0 评论 -
重载自己的流并实现格式
在实际应用中,有时候需要对流的输出格式进行设定。比如说,需要对文件流中内置类型之间加上分隔符。而在输出到终端则加上空格。对文件流则有其他的格式要求。为每一种流都定义一个格式的输出太麻烦,而且对已经封装好的类则不可以去内部修改它们的输出操作符。因此,我们需要定义一个包装过的流类型,它通过模板参数接受一个内置的流,然后对不同的内置类型执行相应的输出操作。(1)(1)为了方便起见,我们还需要对std::e原创 2016-09-02 10:53:58 · 355 阅读 · 0 评论 -
C++:多线程编程学习:利用多线程进行归并排序。
#include <pthread.h>#include <iostream>#include <fstream>#include <string>#include <vector>#include <cstdlib>#include "unistd.h"using namespace std;#define NUM_THREADS 5vector<int> read_file(str原创 2016-09-08 20:24:43 · 3302 阅读 · 0 评论 -
C++primer学习:标准库特殊设施:bitset
(1):标准库定义了bitset类,使得位运算的使用更加容易.例子1:定义一个数据结构,包含一个整形对象,记录一个包含10个文图的测验的解答.编写一个函数可以更新答案.编写一个函数获得学生成绩。//注意:由于类的成员bitset是一个模板,所以我们需要将该类也定义为一个含有显示模板实参的类.template<size_t M>class test{ template<size_t N>原创 2015-12-09 17:12:43 · 310 阅读 · 0 评论 -
C++Primer学习:模板特例化
(1)类模板特例化某些时候通用模板的定义不适用,这个时候就需要对特定类型的实例进行特例化.例子1:hash类模板是标准库里的一个模板,我们现在需要对它进行特例化,定义hash<Sales_data>,使得关联容器可以存储相应的对象.//注意,需要在sales_data上声明友元.#include "unordered_set"#include "Sales.h"namespace std{//原创 2015-12-08 22:46:09 · 592 阅读 · 0 评论 -
C++学习之模板编程:可变参数模板
typename…指出接下来的参数表示零个或多个类型的类表.sizeof…返回参数包的个数.template<typename T,typename...args>void foo(const T& t, const args&... rest){ cout << sizeof...(args)<<" "<<sizeof...(rest)<<endl;}int main(){原创 2015-12-08 19:23:48 · 403 阅读 · 0 评论 -
C++primer学习:标准库特殊设施:tuple
(1):tuple的定义;tuple模板可以视为一种快速随意的数据结构.例子1:定义几个tuple; tuple<int,int,int> a(10,20,30); tuple<string, vector<string>, pair<string, int>> s;例子2:编写一个findbook函数和reportresult函数,可以在许多书店的销售记录中查找到指定的书籍记录.并保原创 2015-12-09 15:10:11 · 318 阅读 · 0 评论 -
C++学习之模板:模板重载
对模板的重载,两个函数模板分别获得对象对应的字符串或者对应的指针的值和指针所指对象的值.template<typename T>string debug_rep(const T& t){ ostringstream ret; ret << t; return ret.str();}template<typename T>string debug_rep(T* p){原创 2015-11-26 19:48:15 · 833 阅读 · 0 评论 -
C++primer学习:模板编程(3):效率与灵活
shared_ptr与unique_ptr之间的明显不同是它们保存指针的策略,另一个不同是它们允许用户重载默认删除器的方式.shared_ptr将删除器以指针的方式存储,而unique_ptr则将它作为自己类型的一部分.[练习]:编写自己的shared_ptr类与unique_ptr类用fuction可以接受所有的可调用对象.#include "iostream"#include "DebugDe原创 2015-11-03 18:47:08 · 328 阅读 · 0 评论 -
C++primer学习:标准库特殊设施:正则表达式基础
(1)正则表达式是一种描述字符序列的方法,是一种极其强大的计算工具.在c++中,RE库是正则表达式库,它定义在头文件regex中.regex类表示一个正则表达式,它支持很多操作,下面就通过几个例子看感受一下.例子(1):拼写规则中,一个i除非出现在c之后,否则不可能出现ei字符串.用正则表达式来匹配不合规则的单词.string pattern("[^c]ei"); pattern = "[原创 2015-12-10 16:46:02 · 648 阅读 · 0 评论 -
C++primer学习:随机数.
C++新标准引用了随机数库和相关的函数对象.default_random_engine e定义了一个随机数引擎.如果我们不给定种子,那么e将会使用默认种子来生成随机数.这样对随机性是不好的.我们可以使用系统函数time来提供种子.分布类型对象可以帮助我们获得在指定范围内均匀分布的随机数序列.例子1:编写一个函数,每次调用返回一个均匀分布的随机 unsigned int。```unsigned in原创 2015-12-10 18:56:23 · 360 阅读 · 0 评论 -
C++primer之格式控制.
(1)C++提供了许多控制格式的操纵符.现在通过几个例子来感受一下;例子1:编写一个程序,输入两个数,要求给出竖式运算的结果.//利用setw()来进行格式控制.#include "iostream"#include "iomanip"#include "string"#include "random"#include "ctime"using namespace std;int ma原创 2015-12-10 22:56:35 · 345 阅读 · 0 评论 -
C++primer学习:模板编程(2):类模板的定义
类模板是用来生成类的蓝图的,与函数模板不同的是,编译器不能为类模板推导模板参数的类型,我们必须要提供额外的信息.[1]定义类模板:####template<typename T> class{}[2]类模板的成员函数本身是一个普通的函数,但是由于类模板的每个实例都有自己的模板参数,因此定义在类模板的成员函数就必须以关键字template开头,后接模板参数.[3]当我们在类的作用域之内使用类模板类原创 2015-11-01 15:18:25 · 392 阅读 · 0 评论 -
C++primer学习:拷贝控制(7):对象移动
很多时候我们不需要拷贝对象,而是需要”接管”原来的内存,这时候C++提供了一些支持.[1]右值引用:通过&&来获得右值引用,右值引用只能绑定到一个将要销毁的对象;[2]std::move(object),可以帮助我们显式的获得一个左值的右值引用.[3]移动构造函数,只是接管原来的内存,而不会创建新的内存,也不会拷贝元素.同时必须保证源对象处于可析构的状态.[4]移动赋值运算符号,同上。[练习1]:对原创 2015-10-24 21:32:13 · 337 阅读 · 0 评论 -
C++primer学习:重载运算(1)
重载运算符号的概念在前面书本上已经介绍过了,我们需要关注的是什么时候将其定义为成员,什么时候定义为普通函数.[1]赋值,下标,调用(()),和访问箭头(->)必须是成员.[2]复合运算符一般来说应该是成员,但并非必须.[3]改变对象状态,或者与给定类型密切相关的应该是成员,比如递增,递减,解引用.[4]具有对称性的运算符号如算术,相等性,关系和位运算符号,应该是普通函数.[练习]:为Sales_da原创 2015-10-25 13:51:11 · 344 阅读 · 0 评论 -
C++primer学习:关联容器练习(4)
单词转换程序:将一个文本中的单词按照另一个文本的转换规则,替换成另外一个文本中的单词.并且开头字母大写;#include "iostream"#include "vector"#include "list"#include "map"#include "set"#include "string"#include "algorithm"#include "utility"#inclu原创 2015-10-10 23:14:31 · 357 阅读 · 0 评论 -
const限定符
const限定符号有很多用处,但是它限制的对象和一般的对象有很多不同,下面来总结一下.[1]const限定符号只在本文件内有效.因为编译器在编译的过程中要将所有的const对象替换成为它的初始值,所以它必须知道该对象的初始值.因此每一个文件都必须有一个const对象的定义.为了不引起冲突,那C++就限定了美国文件内的const对象都是独立的.[2]但是有的时候const对象的初始值不是一个常量而是一原创 2015-09-15 13:25:40 · 266 阅读 · 0 评论 -
新浪笔试:大数相乘.
这是一道新浪的笔试题,计算两个很大的数相乘并输出结果.思路是采取分解两个大数,将它们写成(a1*10^n1 + a2*10^n2…..)*(b1*10^n1 + b2*10^n2…..)的形式,然后计算a1b1,a2b2…,然后加上权重,最后加起来.算法的时间界是(N1*N2/M^2),N1,N2是输入的位数.#include "iostream"#include "string"#inclu原创 2015-10-19 13:50:22 · 405 阅读 · 0 评论