
C++总结
文章平均质量分 53
岛上码农
Flutter爱好者,上架过百万级用户App(App Store分类排名前30),搞过后端开发。
展开
-
文件读写
#include #include using namespace std;int main(void) { ofstream outfile("E://test_out.txt"); //输出文件绝对路径方式访问,相对路径同输入文件 ifstream infile("path//test_in.txt"); //绝对路径,注意转义字符//原创 2009-08-24 13:57:00 · 197 阅读 · 0 评论 -
折半搜索法(Binary Search)
templatebool binary_search(T* A, T key, const int length){ int middle = length/2; while (key != A[middle] && middle > 0 && middle { if(key > A[middle]) { middle = (middle + length)/2; } else原创 2009-10-12 13:39:00 · 194 阅读 · 0 评论 -
C++编译成DLL在C#中调用的方法示例代码
建立C++项目时选择生成DLL库C++示例代码 dllmain.cpp 生成test.dll #include "ClassHeader.h" //类定义(声明)头文件extern "C" _declspec(dllexport) ClassName* createClass(){ //创建类对象,返回指针 return new ClassName();}extern "C" _原创 2009-10-15 21:11:00 · 535 阅读 · 0 评论 -
set_new_handler函数的使用
部分资料来自《Effective C++》和http://www.cpluscplus.com调用形式:set_new_handler(void(*new_p())set_new_handler函数(需要#include)接收一个空返回值空参数的函数指针,用来处理使用new操作符时可能遇到存储不足的情况,在存储不足的时候可以抛出std:bad_alloc或者调用cstdlib的abo原创 2009-11-14 16:18:00 · 538 阅读 · 0 评论 -
STL学习总结:iterator的使用
1、iterator分为顺序访问和随机访问,顺序访问分为前向(--)和后向(++),随机访问则没有这限制,在可访问的容器范围内,可以对迭代器增加随意的偏移量。需要注意的是,判断iterator是否到容器尾部时,尽量不要使用" for(pos = container.begin(); pos != container.end(); ++pos)可双向访问的容器类有:list原创 2009-11-27 21:05:00 · 346 阅读 · 1 评论 -
STL学习之二:基本算法
先看一段代码: #include #include #include #include using namespace std;bool lagerComp(int i, int j) {return (i>j);} //不能使用模板函数int main(void){ vector int_vec; vector::iterator pos原创 2009-11-29 20:33:00 · 251 阅读 · 0 评论 -
STL学习之copy与iterator适配器
在C++中有些函数的容器范围是不定的,例如copy函数,指定数据源范围后,目的容器只需要指定起始地址就可以将数据源的数据复制到目的容器。然而,如果目的容器的容量不够,则会出现运行错误,例如: list col1; vector col2,col4; for (int i=0;i<10;i++) { col1.push_back(i);原创 2009-12-02 22:08:00 · 409 阅读 · 0 评论 -
STL学习:断言(predicate)的使用
在C++标准库中提供了带断言函数参数的一些算法函数,比如说find_if函数(用于查找满足断言条件的元素),sort(按照断言条件排序)等等。如下面得代码所示:#include #include #include #include //for abs()#include #include using namespace std;class Person{原创 2009-12-07 20:25:00 · 329 阅读 · 0 评论 -
链式结构实现的二叉树代码
<br />#include <iostream>using namespace std;template<class T>class binary_tree;template<class T>class node{public: node():left(0),right(0),parent(0){} node(T& element):data(element),left(0),right(0),parent(0){} friend class binary_原创 2010-07-06 15:13:00 · 248 阅读 · 0 评论 -
汉字编码及C++里的判断
<br />DOS下的点阵汉字 <br /> 你是否碰到过用启动盘启动系统后用DIR命令得到一串串莫名其妙的字符?有经验的朋友会告诉你:那是汉字。汉字?你不禁会问:怎么一个我一个也不认识。但那确确实实是汉字,如果你启动UCDOS或其他的汉字系统后,就会看到那是一个个熟悉的汉字。同样是汉字,为什么前后会看到不同的结果?呵呵,其实在电脑硬件中,根本没有汉字这个概念,也没有英文的概念,这铁玩意认识的概念只有——内码。<br />汉字的内码<br /> 点头表示什么?是“对”、“YES”,偏偏有转载 2010-07-13 10:10:00 · 263 阅读 · 0 评论 -
安装和编译Skyeye
<br />Skyeye是一款嵌入式仿真软件,可以在linux下完成一直uc/OS II和uclinux。下载了好几个版本,发现下面这个Skyeye-1.2.6能够安装。<br />下载地址:<br />http://download.youkuaiyun.com/source/946088<br /> <br />安装和编译安装说明就好(我看的是1.3的,有些步骤不需要,不过依次来也不会有问题)<br />首先使用tar命令解压:<br />tar jvxf skyeye-1.2.6_rc1.tar.bz2<br /原创 2010-07-21 13:38:00 · 269 阅读 · 0 评论 -
C++代码在VS中断点无效的解决方法
在VS2005中当插入断点在调试的时候出现断点无法命中的情况,是由于没有生成调试信息导致的。在解决方案管理器中点项目,右键选择“属性”->“配置属性”->“链接器”->“调试”->“生产调试信息”->“是”;同时选择“C/C++项”中的“调试信息格式”,选择“程序数据库”;在“工具”->“选项”->“常规”->去掉“启用仅“我的代码””前面那个勾,并勾上“要求源文件与原始版本完全匹配”。再重新生成即可解决该问题。原创 2010-05-31 13:52:00 · 427 阅读 · 1 评论 -
编写属于自己的比较方法用于排序算法
<br />在排序算法中需要按照一定的逻辑来对融洽的元素进行排序,在STL中提供了诸如基本类型比较(less,greater)等函数,但是<br />实际应用中可能还需要自定义一些比较函数。我们根据STL的less函数依葫芦画瓢就可以自定义的比较函数了。<br />STL中less函数的定义如下(资料来自www.cplusplus.com):template <class T> struct less : binary_function <T,T,bool> { bool operator() (co原创 2010-05-31 14:10:00 · 184 阅读 · 0 评论 -
malloc和calloc
<br />malloc函数和calloc函数都能给指针分配类内存,返回的为void*指针,void*指针可以被转化为任意类型指针。<br />不同的是malloc函数不对分配的内存进行初始化,而calloc则对分配的内存进行初始化。<br />例如:<br /> char * p; p = (char *)calloc(5,sizeof(char)); memcpy(p,"hello",2); printf("%s/n",p);<br />输出为:he<br />如果是malloc<br />原创 2010-06-11 17:19:00 · 174 阅读 · 0 评论 -
使用Vector构建的堆栈类
<br />#include<vector>#include<iostream>#include<stdexcept>template<typename T>class Stack{ private: std::vector<T> elem; public: void push(const T&); void pop(void); T top() const; bool empty() const { return ele原创 2010-08-13 21:33:00 · 252 阅读 · 0 评论 -
牛顿迭代法求平方根
牛顿迭代法求方程 f(x0)=0 的根 设一初值x0,然后用牛顿迭代公式 x1=x0-f(x0)/f(x0) 计算出下一个x,重复不断地用刚计算出的x取代上一个x值,即 x(i+1)=xi-f(xi)/f(xi)例如求解 sqrt(2) 可以设sqrt(2)=x 即 x^2-2=0 则 f(x)=x^2-2 所以 f(x)=2x 所以有迭代公式 x=1/2*(x0+2/x0)代码如下:dou原创 2009-10-09 16:50:00 · 286 阅读 · 0 评论 -
插入排序法和归并排序法
#ifndef SORT_H#define SORT_H#include templatevoid insert_sort(T* A, const int length){ for(int i=1;i { int j = i-1; T key = A[i]; while(key { A[j+1] = A[j]; j --; } A[j+1] = key; }}te原创 2009-09-27 12:53:00 · 195 阅读 · 0 评论 -
C和C++语言学习总结(资料来自 林锐博士 2001 年7 月24)
知识结构: 1、if,for,switch,goto 2、#define,const 3、文件拷贝的代码,动态生成内存,复合表达式,strcpy,memcpy,sizeof 4、函数参数传递,内存分配方式,内存错误表现,malloc与new区别 5、类重载、隐藏与覆盖区别,extern问题,函数参数的缺省值问题,宏代码与内联函数区别 6、构造和析构的次序,Str转载 2009-09-26 12:17:00 · 157 阅读 · 0 评论 -
C++滑动平均函数代码
#include templateT smooth(T input,const int LENGTH = 32) //滑动平均函数{ if(LENGTH == 1) { return input; } T output; static queue buffer; static T sum;原创 2009-08-24 13:24:00 · 564 阅读 · 0 评论 -
C++写的数组模板类
#ifndef CARRAY_H#define CARRAY_H#includeusing namespace std;template class CArray {public: //CArray(); CArray(int length); CArray(Type* initArray, const int length);原创 2009-08-24 13:59:00 · 427 阅读 · 1 评论 -
模板函数(来自C++ Primer的例子)
#include using namespace std;templateType min(Type (&r_array)[size]){ if(size { cerr exit(1); } Type min_val = r_array[0]; for(int i = 1;i原创 2009-08-26 18:06:00 · 159 阅读 · 0 评论 -
缺省构造函数(C++ Primer学习总结)
1、缺省构造函数也可以接受实参2、编译器未必会自动生成一个缺省构造函数3、如果缺省构造函数并未声明为public,那么在声明一个类对象时不会调用其缺省构造函数4、如果没有定义缺省构造函数,而定义了其他的带有实参的构造函数,那么声明类对象时应当带上相应的实参以实例化该对象5、没有定义缺省构造函数也没有定义其他构造函数,那么声明不带参数的类对象是合法的6、为限制对象的创建,可以将某原创 2009-08-28 15:31:00 · 223 阅读 · 0 评论 -
一些错误(也许很低级)的解决方法
1、无法解析的外部命令,然后会跟着一个对象的构造函数的提示信息,例如: 错误 1 error LNK2019: 无法解析的外部符号 "public: __thiscall Account::Account(void)" (??0Account@@QAE@XZ),该符号在函数 "public: class Account * __thiscall Account::init_he原创 2009-08-31 20:32:00 · 222 阅读 · 0 评论 -
static成员变量和函数
static成员变量表示在类中是共享存储区域的,即任意一个对象对static成员进行操作都会影响同一类其他对象该成员的值。同时应当注意的是静态成员变量必须初始化,但是不建议放在构造函数中初始化(因为没构建一个对象就会更改其值),最佳的初始化方式是在类以外的其他地方使用类访问符"::"进行初始化。 例如:#includeusing namespace std;cl原创 2009-09-01 10:09:00 · 309 阅读 · 0 评论 -
C++写的队列类模板(Queue.h)
#ifndef QUEUE_H#define QUEUE_H#include #include using namespace std;templateclass Queue{public: Queue():_capacity(0),_size(0){}; Queue(int); ~Queue(); void add原创 2009-09-07 20:20:00 · 622 阅读 · 1 评论 -
使用引用参数和按值传递参数
对于常用数据类型来说(char, short, int, long, float, double)这样的参数来说,再不需要更改参数原值的情况下,引用参数和按值传递参数没太大区别。然而对于大型的数组或者其他其他数据类型如类对象,结构体来说按值传递的拷贝开销太大,效率偏低,因此此时不适合按值传递参数。此外,对于类模板来说,使用参数来初始化其元素时(元素类型由类模板定义类型决定),使用引用参数才更通原创 2009-09-07 20:45:00 · 208 阅读 · 0 评论 -
队列的更好的实现方法(链式结构)
#ifndef QUEUE_H#define QUEUE_H#include using namespace std;templateclass Queue;templateclass QueueItem{public: QueueItem(const Type&); friend class Queue; //声明为友元才能访问私原创 2009-09-08 16:13:00 · 143 阅读 · 0 评论 -
C++链表模板
#ifndef CHAINLIST_H#define CHAINLIST_H#include template //声明class ChainList;templateclass Node{public: Node(Type&); friend class ChainList; //友元类,以访问其私有数据private:原创 2009-09-16 21:17:00 · 288 阅读 · 0 评论 -
虚函数的调用
虚函数的调用准则是对象指针指向哪个类的对象实例则执行哪个类的虚函数。例如:#include iostream>using namespace std;class A{public: void virtual f() { cout原创 2009-09-17 15:53:00 · 209 阅读 · 0 评论 -
虚拟继承
虚拟继承是在多重继承下引入的一个解决由于多重继承中继承相同成员函数时带来编译器编译时不知道具体调用哪个函数的问题。 例如下面的例子: #include iostream> using namespace std; class Vehicle { public: Vehicle(int weight转载 2009-09-17 20:52:00 · 296 阅读 · 0 评论 -
关于C++的引用【转载】
引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。我在工作中发现,许多人使用它仅仅是想当然,在某些微妙的场合,很容易出错,究其原由,大多因为没有搞清本源。故在本篇中我将对引用进行详细讨论,希望对大家更好地理解和使用引用起到抛砖引玉的作用。 引用简介 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完转载 2009-09-17 15:48:00 · 138 阅读 · 0 评论 -
C++堆栈模板类
#ifndef STACK_H#define STACK_H#includeusing namespace std;templateclass Stack;templateclass Node{public: Node(const T &item):data(item),next(0){} //必须把next置0,否则在stack析构时会原创 2009-09-23 12:30:00 · 232 阅读 · 0 评论 -
多态实现的两种方式
<br />看《C++ Template》一书中才发现使用模板也可以实现多态,所不同的是模板灵活性不如抽象类,但是是静态编译的,因此效率要高。<br />#include<iostream>class Shape{ public: virtual void draw() const = 0;};class Circle:public Shape{ public: virtual void draw() const;};void Circle::dra原创 2010-08-18 17:10:00 · 664 阅读 · 0 评论