C++ VC
靖心
降低成功的时间复杂度,提高生活的空间复杂度
专注,努力不会白费的!
展开
-
数据结构C++算法实现3 - 归并排序2
这次是按照 Introduction to Algorithm 的归并排序来写的C++实现算法,其中复用了前面用过的合并两个数组的算法。STL函数:for_each(vecI1.begin(), vecI1.end(), Print());这次用了for_each这个STL中的标准函数,代替了前面自己写的for_all函数,用法也很简单,前面两个参数是数组的范围,第三个参数可以是函数也可以原创 2013-10-06 10:36:06 · 1231 阅读 · 0 评论 -
C++ STL vector, valarray, 和bitSet使用方法对比
三个容器要数vector是最常用的了,但是什么时候应该使用其他容器呢?下面看看他们的用法比较。初始化: valarray并不是一个标准的stl容器,因为它本身没有iterators,这就是为什么上面它不可以想vector那样初始化。尽量不要使用vector<bool>这样的容器。下面程序最后一句是不能通过编译的。因为&arr[]返回的是使用代理类型,而不是指针地址。但是下面代码却是可行的:但是这个问题,使用bitset也是无法通过编译的:valarray是用来存储一个数列,可以快速原创 2013-11-30 08:53:00 · 4090 阅读 · 0 评论 -
C++类的析构函数调用和虚析构函数
析构函数一般是自动调用的,但是某些情况下页需要显式调用,如出栈和入栈操作:void C::push_back(const X& a){// ...new(p) X{a}; // copy constr uct an X with the value a in address p// ...} void C::pop_back(){// ...p−>˜X(); // de原创 2013-11-13 08:48:40 · 2329 阅读 · 0 评论 -
C++构造函数和析构函数的调用顺序
C++如果没有分配资源那么就不一定需要析构函数,否则就需要释放资源,如下:class Vector {public:Vector(int s) :elem{new double[s]}, sz{s} { }; // constructor: acquire memory˜Vector() { delete[] elem; } // destructor: release memory/原创 2013-11-12 12:41:32 · 8268 阅读 · 0 评论 -
C++指向函数的指针
C++函数代码也和对象一样,都是保存在内存中的,所以函数也是有内存地址的。但是函数指针是不予许修改的。只可以有两种操作 1. 调用函数, 2 获取其地址。 void error(string s) { /*函数内容*/ }void (*efct)(string); // 确定函数指针的类别void f(){efct = &error; // efct points to errore原创 2013-11-04 09:04:49 · 1243 阅读 · 0 评论 -
C++适配器功能实现及函数对象
很多STL算法都使用了function objects也叫functors,是一个对象,重载了()操作符,也就能像调用函数那样了使用这个对象了。比如简单的sort算法:那就可以排序vec,但是如果vec装的不是int而是自定义类型呢。如LeetCode上最喜欢用的链表数据结构:struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {}};如果我们需要比较ListNode的原创 2013-11-19 11:07:46 · 1862 阅读 · 0 评论 -
自定义类型的I/O输出用法
自定义类的输出就是使得类可以自带输入输出符号操作,使得类可以方便使用。如有一个结构体:struct MyStruct{ string name; int num;};我们可以定义简单的输出,并把输出格式化为:{"name","num"},如下代码:ostream& operator<<(ostream& os, const MyStruct &e){ return原创 2013-10-07 08:55:48 · 1344 阅读 · 0 评论 -
TCPL C++迭代器的用法 用作参数传递 读写文件
C++数据流迭代器(iterators)一般不直接使用,而是用做某些算法的参数。这些算法多是STL中的算法,是用C习惯了的朋友,应该会觉得这个有点不需太习惯,但是这就是C++的方法,据C++之父Bejarne的说法就是代码要elegant(优雅)!多使用数据流,并熟悉这个概念的话,我觉得还是挺好的概念的。例如下面是一个简单的程序:int main(){ string from,原创 2013-10-21 08:57:53 · 4019 阅读 · 0 评论 -
C++ 一些参数传递技巧及建议及局部静态函数
参数传递:只有正式参数是引用变量的时候,才是直接修改传递的变量,其他情况都只是传递一份copy(包括指针情况)。引用参数不予许传递常量参数void update(float& i);void g(double d, float r){update(2.0f); // 错误,不能是常量参数update(r); // OKupdate(d); // 错误,要求类型转换!}我们一般传递数组参数都是用两个参数,数组名字和元素个数,但是如下面例子这样就不需要两个参数也可以传递数组了:原创 2013-11-02 09:55:46 · 2515 阅读 · 0 评论 -
C++重载操作符笔记
重载和多态是不一样的,重载主要作用是多操作符号的重载。(Operator overloading)如有下面的类:class complex { // very simplified complexdouble re, im;public:complex(double r, double i) :re{r}, im{i} { }complex operator+(complex);原创 2013-11-17 08:43:04 · 2043 阅读 · 0 评论 -
C++ static 静态数据和静态函数总结
本文总结了所有关于C++ static修饰的数据和函数使用方法,作用和注意事项。一 静态数据成员: public/protected/private访问规则不变1.静态数据成员的声明: 静态数据成员实际上是类域中的全局变量。谨记:在.h类里面的静态成员数据和函数都只是相当于声明的作用,而不是定义!!!定义才分配空间,而声明不分配。在类里面只有const static才可以初始化,作为常量使用。const或者static都不可以。2. 静态数据的定义:必须在.cpp文件中定义原创 2013-11-16 09:40:13 · 3108 阅读 · 0 评论 -
C++类初始化 构造函数 笔记
当我们定义了构造函数之后,原有的默认构造函数就不可用了。但是拷贝构造函数还是可用的。当然我们也可以显式禁止拷贝构造函数。我们也可以自己定义默认构造函数,可以不带参数就构造一个类对象。class String {public:String(const char∗ p = ""); // default constructor : empty string// ...};Stri原创 2013-11-15 09:34:45 · 1723 阅读 · 0 评论 -
C++ inline constexpr 内联函数和常量表达式函数问题
函数问题一)inline: 内联函数,就是相当于把被调用的函数硬嵌入调用它的函数中去,不用保存栈,所以速度快。1. 要使inline起作用,必须是inline函数定义(不但是声明)在其调用函数范围内2. 不同头文件包含相同inline函数,不是重定义,但是两个或多个inline函数必须一模一样。二)constexpr:如果参数是常量,就可以了在编译时计算的函数。 定义一个con原创 2013-10-27 08:42:04 · 4385 阅读 · 0 评论 -
C++ 指针 多维数组传递参数
数组作为函数参数,其实就是把其第一个元素地址传递给函数。而多维数组一般都非常困惑我们,解决好多维数组参数传递也有多种实现方法,但是我觉得还是以The C++ Programming Language这本书为标准,看看如何做吧。C++之父的建议就是不要使用数组传递参数,而是把数组用类包起来,使用STL如:array, string,vector等。如果坚持要直接使用一般数组的话,会要应付各种原创 2013-10-29 08:44:26 · 3306 阅读 · 1 评论 -
TCPL - C++迭代器的用法 - 操作数组和数据流
1. 遍历数组最简单的也是最常用的就是遍历访问一个数组了,如检查一个字符串里面是否含有某个字符:原创 2013-10-20 09:05:00 · 3231 阅读 · 0 评论 -
VC++全局包含文件路径设置( Include 设置)
VC++要设置全局Include真的非常麻烦,很多人都不懂,甚至有人说是不可以修改了,就不能用Opengl了,当然这是不可能的,不过VC2010,2012的设置真叫人头疼。下面看看这是如何设置的:在Visual studio2012(和2011,和2010)设置全局C++的包含路径Setting GlobalPosted onDecember 17, 2012 byJeff翻译 2013-09-26 22:03:05 · 6742 阅读 · 0 评论 -
C++ sstream 字符数据流的使用
简介:1 iostream支持程序和终端之间的I/O;2 fstream支持程序和文件之间的I/O;3 sstream支持程序和字符对象之间的I/Osstream使用:1 istringstream只允许读出字符,可以使用.str(s)初始化,不允许使用int main() { string s = "-3745 djjkf this ia s very goo原创 2013-12-22 08:08:47 · 2651 阅读 · 4 评论