
C++基础
文章平均质量分 69
xinyYoung
这个作者很懒,什么都没留下…
展开
-
基于C++11 可变参数构造对象池
概要:最近写代码时发现需要一个对象池用于减少对象创建与销毁的开销。理想中对象池接口应尽量精简,逻辑尽量精简,并可以支持不同的初始化构造方式。阅读<<深入应用C++11 代码优化与工程级应用>>的对象池,其设计思路满足大部分需求,但示例代码略有瑕疵。在书中的代码基础上进行扩展。核心逻辑:对象核心逻辑与大多数逻辑的优化思路是一致的,用空间换时间,通常来说,对象的创建有些部分是无法避免的,特别是在对系统进行内存申请的时候,所以,当幸苦创建的对象在我们不需要的时候返回给了系统原创 2020-08-23 00:03:00 · 490 阅读 · 1 评论 -
《More Effective C++》 笔记
条款1: 仔细区分 pointers 和 referencespointers 是一个变量,其本身存放实际内容的地址references 是一个引用,其就是实际内容的别名两者都支持多态但是还是有一定区别的pointer 在进行创建的时,不一定要立即给定一个准确值,虽然发生这种情况时,通常会赋予一个 null,来区别当前指针未进行初始化,杜绝由此产生的野指针,而 pointer 也是可以进行...原创 2020-04-22 00:05:02 · 364 阅读 · 0 评论 -
[2018年6月8号]C++ primer 课后练习 第十七章 标准库的特殊设施
17.1 tuple<int, int, int > tu_0 = { 10,20,30 };17.2 tuple<int, vector<int>, pair<string,int>> tu_2 = {10,{10},{"string",10}}; //使用列表初始化 vector,pair17.3class QueryResultTu...原创 2018-06-08 08:37:17 · 212 阅读 · 0 评论 -
[2018年5月30号]C++ primer 课后练习 第十六章 模版与泛型编程
16.17当class和typename同在模版参数列表中时,两者并无不同(P580),但是当函数返回类型是模版内定义的类型成员时,必须使用typename,.用来区分是否是static成员16.18a.template <typename T, typename U,typename V>void f1(T,U,V); b.template <typename T>T...原创 2018-05-30 08:45:26 · 252 阅读 · 0 评论 -
[2018年6月13号]C++ primer 课后练习 第十八章用于大型程序的工具
18.8对于一个函数来说,noexcept说明要么出现在该函数的所有声明语句和定义语句中,要么一次都不出现,编译器不能也不必在编译时验证异常说明,当函数指针拥有异常说明并表示该函数指针不会抛出异常说明时,函数指针只能指向不会抛出异常的函数,如果函数指针不表示不会抛出异常,则可以指向任何函数,即使是带有异常说明的函数18.9class out_of_stock : public std::runti...原创 2018-06-13 09:19:23 · 170 阅读 · 0 评论 -
[2018年6月6号]C++ primer 课后练习 第十六章 模版与泛型编程
16.58 template <typename...Args> void emplace_back(Args...args){ chk_n_alloc(); alloc.construct(first_free++,std::forward(args)..); }vec: template <typename...Ar...原创 2018-06-06 08:39:33 · 144 阅读 · 0 评论 -
[2018年6月21号]C++ primer 课后练习 第十九章特殊工具与技术
19.1namespace my{ void* operator new(size_t s){ if(void * mem = malloc(s)){ return mem; }else{ throw bad_alloc(); } } void operator delete(...原创 2018-06-21 08:54:11 · 231 阅读 · 0 评论 -
[2018年5月31号]C++ primer 课后练习 第十六章 模版与泛型编程
16.25extern template class vector<string>;实例化声明,表示其他地方有实例化template class vector<Sales_data>;实例化定义16.2616.27a.实例化了char类型的classb.实例化了double的类型的classc.实例化了int的类型的classd.实例化了char类型的classe.对sc进...原创 2018-05-31 08:44:32 · 187 阅读 · 0 评论 -
[2018年6月12号]C++ primer 课后练习 第十七章 标准库的特殊设施 第十八章用于大型程序的工具
17.3717.38 ifstream is("test_2.txt"); char c[200]; while (!is.eof()) { is.getline(c, 200,'\n'); cout.write(c, is.gcount()); }一开始的版本没有设置delim,发现getline无法自动前进到下一行,折腾了好...原创 2018-06-12 08:45:33 · 268 阅读 · 0 评论 -
[2018年5月29号]C++ primer 课后练习 第十六章 模版与泛型编程
16.9函数模版就是一个公式,可用来生成针对特定类型的函数版本,模版定义以关键字template开始,后跟一个模版参数列表,这是一个逗号分割的一个或多个模版参数的列表类模版是用来生成类的蓝图的,与函数模版的不同之处是,编译器不能为类模版推断模版参数类型,如我们已经多次看到的,为了使用类模版,我们必须在模版名后的尖扩号中提供额外信息...原创 2018-05-29 09:09:10 · 182 阅读 · 0 评论 -
[2018年6月5号]C++ primer 课后练习 第十六章 模版与泛型编程
16.51template <typename T, typename...Args>void foo_1651(T& t1, Args... args){ cout << "Args size: " << sizeof...(Args) << "args size: " << sizeof...(arg原创 2018-06-05 08:28:10 · 233 阅读 · 0 评论 -
[2018年6月11号]C++ primer 课后练习 第十七章 标准库的特殊设施
17.31每次随机结果相同17.32resp作用域将在do内,无法通过编译17.32可以用随机数和switch进行搭配,当随机到某个数时,进行相应的转换调用17.33原创 2018-06-11 20:12:06 · 186 阅读 · 0 评论 -
[2018年6月4号]C++ primer 课后练习 第十六章 模版与泛型编程
16.47template <typename F, typename T1, typename T2>void filp(F f, T1&& t1, T2&& t2){ f(std::forward<T1>(t1),std::forward<T2>(t2));}void func_f(int& i, in...原创 2018-06-04 22:09:11 · 171 阅读 · 0 评论 -
[2018年5月24号]C++ primer 课后练习 第十五章 面向对象程序设计
15.30double print_total(ostream& os, const Quote & item, size_t n){ double ret = item.net_price(n); os << "ISBN: " << item.isbn() << "#sold:" << n <&原创 2018-05-24 08:57:28 · 166 阅读 · 0 评论 -
[2018年5月28号]C++ primer 课后练习 第十六章 模版与泛型编程
16.1编译器用推断出的模版参数来为我们实例化一个特定版本的函数,当编译器实例化一个模版时,它使用实际的模版实参代替对应的模版参数来创建出一个新"实例"16.2template <typename T>int compare(const T &l, const T &r){ if(l < r){ return -1; } ...原创 2018-05-28 08:31:28 · 174 阅读 · 0 评论 -
[2018年5月23号]C++ primer 课后练习 第十五章 面向对象程序设计
15.26class Quote {public: Quote() = default; Quote(const Quote& q) { cout << " const Quote& q " << endl; }; Quote& operator=(const Quote& dq) { cou...原创 2018-05-23 08:40:36 · 243 阅读 · 0 评论 -
[2018年6月3号]C++ primer 课后练习 第十六章 模版与泛型编程
16.40大部分情况下是合法的,在*beg的类型允许对+0这已操作允许时,返回类型为*beg+0后的结果16.41template<typename T1, typename T2>auto sum(T1 t1, T2 t2)-> decltype(t1+t2){ return t1+t2;}16.42a. T为int,val为 int&b.T为const i...原创 2018-06-03 20:38:42 · 184 阅读 · 0 评论 -
[2018年6月7号]C++ primer 课后练习 第十六章 模版与泛型编程
16.62namespace std{ template<> class hash<Sales_data>{ typedef size_t result_type; typedef Sales_data argument_type; size_t operator()(const Sales_data &...原创 2018-06-07 08:32:13 · 165 阅读 · 0 评论 -
[2018年6月14号]C++ primer 课后练习 第十八章用于大型程序的工具
18.15using声明:一次只引入命名空间的一个成员,直到using声明的作用域结束using指示:引入命名空间下的所有的成员,还将命名空间成员提升到包含命名空间本身,和using指示的最近作用域的能力 using声明和using指示在作用域上的区别直接决定了它们工作方式的不同,对于using声明来说,我们指示简单地令名字在局部作用域内有效.相反,using指示是令整个命名空间的所有内容变得有效...原创 2018-06-14 09:00:52 · 320 阅读 · 0 评论 -
<iostream> no file or directory
使用liunx g++ 编译时出现该问题问题原因是当前文件后缀名错误将main.c 改成main.cpp即可解决原创 2018-08-14 09:22:24 · 301 阅读 · 0 评论 -
[2018年6月20号]C++ primer 课后练习 第十八章用于大型程序的工具
18.28无需前缀:bar,ival,cval,需要前缀,foo,两个直接基类里都有该名称的函数18.29原创 2018-06-20 08:47:23 · 335 阅读 · 0 评论 -
[2018年6月19号]C++ primer 课后练习 第十八章用于大型程序的工具
18.21a.CADVehicle多重继承,正确,Vehicle将是默认的private继承b.错误,不能多重继承同一个基类c.iostream多重继承istream,ostream,正确18.22猜测:规则是从基类开始构造,按继承列表顺序进行,1.A()2.B()3.C()4.X()5.Y()6.Z()7.MI()18.23a.可以 b.可以c.可以d.可以18.24除了print()和析构函数...原创 2018-06-19 08:51:10 · 340 阅读 · 0 评论 -
[2018年6月16号~18号]端午节未更新
未更新原创 2018-06-18 23:02:18 · 133 阅读 · 0 评论 -
[2018年6月10号]C++ primer 课后练习 第十七章 标准库的特殊设施
17.10 bitset<32> b_0("0111010010000100000001"); bitset<32> b; b.set(1); b.set(2); b.set(3); b.set(5); b.set(8); b.set(13); b.set(21);17.11 bitset<1...原创 2018-06-10 19:11:08 · 225 阅读 · 0 评论 -
C++学习总结
两个月,终于看完c++primer说来惭愧,工作两年,这应该是我第一本系统阅读的计算机相关书籍,总的来说,收获真的很大,现在的我也应该算入了C++的门,未来的路很长,但总归我还是迈出了第一步.工作两年,一直只是在公司提供的框架下面,做业务逻辑的工作, 从某一个时刻,我突然发现,如果离开现在的环境,那我将是一无是处, 从第一次冒出这个念头,到一次次的思考,我感觉到了恐慌,总说程序员需要提升自己,但是...原创 2018-06-25 08:56:44 · 203 阅读 · 0 评论 -
[2018年6月25号]C++ primer 课后练习 第十九章特殊工具与技术
19.26一个继承c的函数,接受一个int指针,一个int参数,返回一个int值一个继承c的函数,接受一个double指针,一个double参数,返回一个double值如果两个值是分开声明的将不会有问题,否则,因为C不接受重载,所以会报错...原创 2018-06-25 08:12:20 · 139 阅读 · 0 评论 -
[2018年6月24号]C++ primer 课后练习 第十九章特殊工具与技术
19.14获得Screen::get_curor类型的成员函数指针,pmf = &Screen::get是否合法,取决于其与get_curor的参数列表以及返回类型是否相同19.15需使用classname::*来说明当前真正是指向成员函数的指针,可以在指向成员函数的指针定义时加const限定符号,而函数指针是普通函数,不可以加19.16 Sales_data& (Sales...原创 2018-06-24 15:25:07 · 222 阅读 · 0 评论 -
[2018年6月2号]C++ primer 课后练习 第十六章 模版与泛型编程
16.32在模版实参腿短过程中,编译器使用函数调用中的实参类型来寻找模版实参,用这些模版实参生成的函数版本与给定的函数调用最为匹配16.331.const转换,可以将一个非const对象的引用传递给一个const引用形参2.数组或函数指针转换,如果函数形参不是引用类型,则可以对数组或函数类型的实参应用正常的指针转换,一个数组实参可以转换为一个指向其首元素的指针,类似的,一个函数实参可以转换为一个改...原创 2018-06-02 13:06:12 · 138 阅读 · 0 评论 -
[2018年6月9号]C++ primer 课后练习 第十七章 标准库的特殊设施
17.4typedef tuple<vector<Sales_data>::size_type, vector<Sales_data>::iterator, vector<Sales_data>::iterator> matches;vector<matches> findBook(vector<vector<Sales_d...原创 2018-06-09 09:11:43 · 159 阅读 · 0 评论 -
[2018年6月23号]C++ primer 课后练习 第十九章特殊工具与技术
19.919.10a.class A *b.class A*c.class A原创 2018-06-23 14:53:56 · 173 阅读 · 0 评论 -
[2018年6月15号]C++ primer 课后练习 第十八章用于大型程序的工具
18.18swap会先在std::swap内寻找匹配函数,若没有,会在外层寻找直到寻找到匹配函数18.19swap会只在std命名空间下寻找,若没有找到mem1, mem2类型匹配的交换函数,将会在编译期间报错18.20primerLib::compute(const void*);compute(int);compute(double);compute(char*, char* = 0); 最佳...原创 2018-06-15 09:10:11 · 155 阅读 · 0 评论 -
[2018年6月1号]C++ primer 课后练习 第十六章 模版与泛型编程
16.26用函数指针来实现删除器,想不出来时候多睡一会template <typename T, typename Func>class my_shared_ptr {public: my_shared_ptr(Func func = 0) :data(nullptr), useCount(new int(1)),del(a) { } my_shared_...原创 2018-06-01 08:44:24 · 180 阅读 · 0 评论 -
[2018年6月22号]C++ primer 课后练习 第十九章特殊工具与技术
19.3a.可以b.将会报错,C为B的派生类,不能进行基类到派生类的转换c.可以19.4 try{ C& m = dynamic_cast<C&>(*pa); //使用C的成员 }catch(bad_cast& bc){ //使用A的成员 }19.5无法为基类增加虚函数时,可以用dynamic...原创 2018-06-22 09:13:51 · 416 阅读 · 4 评论 -
[2018年5月27号]C++ primer 课后练习 第十五章 面向对象程序设计
15.39QueryResult AndQuery::eval(const TextQuery& t)const { auto lQueryResult = lhs.eval(t); auto rQueryResult = rhs.eval(t); auto finalResult = make_shared<set<line_no>>()...原创 2018-05-27 14:17:23 · 118 阅读 · 0 评论 -
[2018年5月26号]C++ primer 课后练习 第十五章 面向对象程序设计
15.34Query q = Query("fiery") & Query("bird")|Query("wind")a:Query(const string&)Query(const string&)Query operator&(const Query&, const Query&)Query(const string&)Query原创 2018-05-26 18:49:45 · 277 阅读 · 0 评论 -
[2018年5月16号]C++ primer 课后练习 第十四章 重载运算与类型转换
14.36class CinString {public: CinString(istream& is = std::cin):is(is){} string operator()()const{ string tmp; if(is >> tmp){ if(!tmp.empty()){ ...原创 2018-05-16 08:51:44 · 106 阅读 · 0 评论 -
[2018年5月4号]C++ primer 课后练习 第十二章 动态内存
12.26 allocator<char> charAllocator; char * a = charAllocator.allocate(tmp.size()); 仅仅将内存申请的方法改为如上即可12.27class TextQuery {public: TextQuery() = default; TextQuery(ifstream& )...原创 2018-05-04 09:04:01 · 147 阅读 · 0 评论 -
[2018年5月17号]C++ primer 课后练习 第十四章 重载运算与类型转换
14.42a:int main(int argc, char *argv[]) { list<int > st; st.insert(st.end(),1201); st.insert(st.end(), 11); st.insert(st.end(), 1231); cout << count_if(st.begin(), st.e...原创 2018-05-17 08:40:03 · 156 阅读 · 0 评论 -
[2018年4月26号]C++ primer 课后练习 第九章 顺序容器
9.27int main() { forward_list<int > flist= {1,2,3,4,5,6,7,8,9}; forward_list<int >::iterator it_after = flist.before_begin(); forward_list<int >::iterator it = flist.beg...原创 2018-04-26 09:18:34 · 105 阅读 · 0 评论 -
[2018年5月10号]C++ primer 课后练习第十三章 拷贝控制
13.39class StrVec {public: StrVec():emlemnts(nullptr),first_free(nullptr),cap(nullptr){} StrVec(const StrVec&); StrVec& operator=(StrVec&); ~StrVec(); void push_back(c...原创 2018-05-10 09:16:52 · 188 阅读 · 0 评论