代码改变世界

随笔分类 -  C++

转:assert() c++ 使用方法

2013-01-11 15:21 by youxin, 270 阅读, 收藏, 编辑
摘要: assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include void assert( int expression );assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 ... 阅读全文

STL priority_queue使用

2012-10-02 13:56 by youxin, 357 阅读, 收藏, 编辑
摘要: Priority queues are a type of container adaptors, specifically designed such that its first element is always the greatest of the elements it contains, according to some strict weak ordering condition.This context is similar to aheapwhere only themax heapelement can be retrieved (the one at the top 阅读全文

STL中的stack的pop函数为什么不返回值?

2012-07-28 02:09 by youxin, 5121 阅读, 收藏, 编辑
摘要: 在数据结构C++语言描述——应用标准模板库(STL)中的解释如下:pop()返回类型:为什么pop()返回viod,而不是类型T呢?也就是说,为什么先用top(),然后用pop()来访问和删除站定的元素,而不是把它们合并一个返回类型T的成员函数。这种设计有很好的理由。如果pop()返回栈顶元素,则必须按值返回,而不是按引用返回。按引用返回是不可行的,因为元素在栈中已经不存在,必须在按引用返回之前现将其存储到某个地方。如果选用动态内存,除非动态内存最终被删除,否则将导致内存泄露。按照数值返回效率很差,因为它包含对类型T的复制构造函数的调用。让pop()返回数值将会导致潜在的内存问题或效率很低下, 阅读全文

C++之父B.Stroustrup言论

2012-07-27 23:27 by youxin, 445 阅读, 收藏, 编辑
摘要: 以下蓝色为提问,黑色为回答。红色为译注,紫色为侯捷个人认为宜再斟酌之处。浅蓝色是侯捷个人阅读时的神秘标记。本繁体文系直接转码,并未将大陆惯用术语转换为台湾惯用术语。[译者按] Bjarne Stroustrup博士,1950年出生于丹麦,先後毕业于丹麦阿鲁斯大学和英国剑挢大学,AT&T大规模程序设计研究部门负责人,AT&T 贝尔实验室和ACM成员。1979年,B. S开始开发一种语言,当时称为"C with Class",後来演化为C++。1998年,ANSI/ISO C++标准建立,同年,B. S推出其经典着作The C++ Programming Lan 阅读全文

转:浅谈c++容器

2012-07-26 23:51 by youxin, 293 阅读, 收藏, 编辑
摘要: 首先,我们必须理解一下什么是容器,在C++中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。很简单,容器就是保存其它对象的对象,当然这是一个朴素的理解,这种“对象”还包含了一系列处理“其它对象”的方法,因为这些方法在程序的设计上会经常被用到,所以容器也体现了一个好处,就是“容器类是一种对特定代码重用问题的良好的解决方案”。容器还有另一个特点是容器可以自行扩展。在解决问题时我们常常不知道我们需要存储多少个对象,也就是说我们不知道应该创建多大的内存空间来保存我们的对象。显然,数组在这一方面也力不从心。容器的优势就在这里,它不需要你预先告诉 阅读全文

C++ STL queue用法

2012-07-26 23:41 by youxin, 1608 阅读, 收藏, 编辑
摘要: FIFO queuequeues are a type of container adaptor, specifically designed to operate in a FIFO context (first-in first-out), where elements are inserted into one end of the container and extracted from the other.queues are implemented ascontainers adaptors, which are classes that use an encapsulated o 阅读全文

c++ STL stack用法

2012-07-26 21:30 by youxin, 1228 阅读, 收藏, 编辑
摘要: stacks are implemented ascontainers adaptors, which are classes that use an encapsulated object of a specific container class as itsunderlying container, providing a specific set of member functions to access its elements. Elements arepushed/poppedfrom the"back"of the specific container, w 阅读全文

c++ 容器定义的几种类型

2012-07-19 19:31 by youxin, 735 阅读, 收藏, 编辑
摘要: size_type ;无符号整形,足够大存储容器数据。iteratorconst_iteratorreverse_iterator iterator that addresses elements in reverse orderconst_reverse_iterator我们可以有2中方法将vector中的元素反序输出:#include<iostream>#include<vector>using namespace std;int main(){ int a[]={1,2,3}; vector<int> vec(a,a+sizeof(a)/sizeof( 阅读全文

最好使用C++转型操作符

2012-07-15 15:48 by youxin, 369 阅读, 收藏, 编辑
摘要: 旧式的C转型方式,几乎允许你将任何类型转换为任何其它类型,有其自身的缺陷,表现在以下两方面:不能更精确地指明其转型的意图。 如将一个pointer-to-base-class-object 转型为一个pointer-to-derived-class-object(改变一个对象的类型)和将一个pointer-to-const-object转型为一个pointer-to-non-const-object(改变对象的常量性),在旧式C语法中并不区分。难以辨识。 旧式C转型方式的语法为(type)expression,由一对小括号加上一个对象名称组成,而这种语法结构在C++的任何地方都有可能使用,这就 阅读全文

c++ delete 后还有必要set Null 吗?

2012-07-15 15:12 by youxin, 4270 阅读, 收藏, 编辑
摘要: 最开始我们Declare array as a pointer, allocate with newint* a = NULL; // pointer to an int, intiallly to nothing. A dynamically allocated array is declared as a pointer, and must not use the fixed array size declaration. The above declaration creates a pointer, but doesn't yet allocate any memory to 阅读全文

STL array

2012-07-15 14:35 by youxin, 341 阅读, 收藏, 编辑
摘要: 先声明,这个STL 容器很少有人使用,因为必须要指定大小,一般都用vector或list 了。template < class T, size_t N > class array;Container propertiesSequenceElements in sequence containers are ordered in a strict linear sequence. Individual elements are accessed by their position in this sequence.Contiguous storage(连续的)The elements 阅读全文

转:C++关键字详解(volatile, mutable, explicit, dynamic_ cast<T>(expression))等

2012-07-15 14:12 by youxin, 333 阅读, 收藏, 编辑
摘要: 1 volatile有些变量是用volatile关键字声明的。当两个线程都要用到某一个变量且该变量的值会被改变时,应该用volatile声明,该关键字的作用是防止优化编译器把变量从内存装入CPU寄存器中。如果变量被装入寄存器,那么两个线程有可能一个使用内存中的变量,一个使用寄存器中的变量,这会造成程序的错误执行。 volatile的意思是让编译器每次操作该变量时一定要从内存中真正取出,而不是使用已经存在寄存器中的值,如下: volatile BOOL bStop = FALSE; 在一个线程中: while( !bStop ) { ... } bStop = FALSE; r... 阅读全文

c++ volatile

2012-07-15 14:05 by youxin, 392 阅读, 收藏, 编辑
摘要: volatile(英文解释:挥发性的,不稳定的)关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。使用该关键字的例子如下:int volatile nVint; 当要求使用volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。而且读取的数据立刻被保存。例如:volatile int i=10;int a = i;...//其他代码,并未明确告诉编译器,对i进行过操作in.. 阅读全文

STL模板参数

2012-07-15 13:41 by youxin, 561 阅读, 收藏, 编辑
摘要: Function templates 有兩種參數:1. Template parameters(模板參數),在function template 名稱前的㆒對角(尖)括號㆗宣告: template <typename T> // T 是個template parameter2. Call parameters(呼叫參數),在function template 名稱後的小(圓)括號㆗宣告: ... max (T const& a, T const& b); // a 和b 是呼叫參數template parameters 的數量可以任意,但你不能在function t 阅读全文

STL 实参推演

2012-07-15 13:05 by youxin, 203 阅读, 收藏, 编辑
摘要: 我们的max函数如下:template <typename T>inline T const& max (T const& a, T const& b){ // if a < b then use b else use a return a < b ? b : a;}我们传递的两个参数类型必须一致,编译器才能得出结论:T必须是你传递的类型。注意:这里不允许进行自动类型转换,每个T都必须正确的匹配。max(4,7); 可以,两个实参都是intmax(4,4,2)不行,第一个int,第二个是double有3中方法可以处理上面错误:1.对实参进行强制类 阅读全文

《c++ templates the complete guide》序言

2012-07-15 12:45 by youxin, 367 阅读, 收藏, 编辑
摘要: 译者序: c++真可谓包罗万象,博大精深。每个在c++中沉迷多年的爱好者都难免有这样的感慨:使用c++多年过后,我们往往只能算是一个熟练的使用者,却从来不敢给自己冠上“精通c++”的头衔,难道“精通c++”永远都是不惭的大言?然而,在学习,使用,和研究c++的过程中,我们总是期望能够像“精通”不断迈进,并领悟c++语言的精髓。我想,要做到这一点起码要注意3个方面:一要把握语言发展的脉搏,二要多应用标准技术,三要洞悉标准技术背后的实现细节。做到这些往往能事半功倍。近年来,c++的新发展主要是在GP方面大放异彩:标准库,boost库,容器,迭代器,仿函数等都是围绕着GP不断呈现出来的,他们都代.. 阅读全文

转:C++和Java 虚函数、抽象函数、抽象类、接口

2012-07-13 21:21 by youxin, 528 阅读, 收藏, 编辑
摘要: 1. Java虚函数 虚函数的存在是为了多态。C++中普通成员函数加上virtual关键字就成为虚函数Java中其实没有虚函数的概念,它的普通函数就相当于C++的虚函数,动态绑定是Java的默认行为。如果Java中不希望某个函数具有虚函数特性,可以加上final关键字变成非虚函数。PS:其实C++和Java在虚函数的观点大同小异,异曲同工罢了。个人心得:C++中,要想实现多态必须要加上virtual关键字,如果在父类函数不加virtual,子类重载函数,不会有多态特性。#include<iostream>using namespace std;class Animal{privat 阅读全文

c++ 用lambda删除vector中元素

2012-07-09 19:12 by youxin, 796 阅读, 收藏, 编辑
摘要: vector<string> vec,vec2; string str; while(cin>>str) vec.push_back(str); cin.sync(); cin.clear(); while(cin>>str) vec2.push_back(str); typedef vector<string>::iterator Iter; string s; vec.erase(remove_if(vec.begin(),vec.end(), [=](string s) ->bool ... 阅读全文

转:C++ Lambda表达式

2012-07-09 13:28 by youxin, 1323 阅读, 收藏, 编辑
摘要: Visual Studio 2010(下称VS2010)中的Visual C++编译器包含了对4项(正式发布后可能更多)C++0x 特性的支持,分别为lambda表达式、auto关键字、static_assert,和右值引用(rvalue references)。此篇文章将对前三项进行详细解释,rv... 阅读全文

c++谓词函数和仿函数

2012-07-09 12:54 by youxin, 4623 阅读, 收藏, 编辑
摘要: 什么谓词,其实就是一个判断式,说白了就是一个返回bool值的函数或者仿函数。(这里说明了谓词可以有2种形式)几元就是函数有几个参数,至于定义和使用,函数定义和一般的函数定义一样,仿函数就是写个类,然后重载operator()。使用就是在那些以这种需要返回bool值的函数作参数的函数里用了。一元谓词函数举例如下:1,判断给出的string对象的长度是否小于6bool GT6(const string &s){return s.size() >= 6;}2,判断给出的int是否在3到8之间bool Compare( int i ) { return ( i >= 3 & 阅读全文
上一页 1 ··· 3 4 5 6 7 8 9 10 11 下一页